亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

深入解析Java中的內部類

2019-11-26 15:03:23
字體:
來源:轉載
供稿:網友

概述

最近學習python,發現python是支持多繼承的,這讓我想起Java是通過內部類實現的這套機制。這篇文章不是講如何通過內部類實現多繼承,而是總結一下內部類的類型和使用方法。

Java內部類分為:

  •     非靜態內部類
  •     靜態內部類
  •     局部內部類
  •     匿名內部類

內部類在Android源碼中被大量的使用,先介紹一下這四種內部類的共同點:

  •     內部類仍然是一個獨立的類,在編譯之后內部類會被編譯成獨立的.class文件,但是前面冠以外部類的類名和$符號。
  •     內部類不能用普通的方式訪問。內部類是外部類的一個成員,因為內部類可以自由的訪問外部類的成員,包括private成員。
  •     內部類聲明為靜態的,就不能隨意的訪問外部類的成員變量了,此時內部類只能訪問到外部類的靜態成員變量。

接下來,分別介紹一下這幾種內部類。
非靜態內部類

當一個類作為另一個類的非靜態成員時,則這個類就是一個非靜態內部類。
創建非靜態內部類的示例代碼如下:

class OutClass { class InnerClass {}}

當我們用javac去編譯的時候,發現生成了兩個.class文件:OutClass.class和OutClass$InnerClass.class。如下圖所示:

201572994546125.jpg (603×85)

從外部類的非靜態方法中實例化內部類

在外部類中訪問內部類是很容易的,直接創建內部類對象,然后通過對象實例調用類內的方法即可。示例代碼如下:

public class OutClass { private static int a = 0; public void makeInner() {  InnerClass inClass = new InnerClass();  inClass.seeOuter(); } public static void main(String[] args) {  OutClass oClass = new OutClass();  oClass.makeInner(); } class InnerClass {  public void seeOuter() {   System.out.println(a);   a++;  } }}
運行結果如下:
0

從外部類的靜態方法中實例化內部類

在外部類中訪問內部類是比較簡單的,可以直接new出內部類對象,但是如果想在外部類的外部使用內部類,接不能直接new內部類名的方式了,而是需要如下方式:

OutClass.InnerClass innerClass = new OutClass().new InnerClass();

也就是說,在外部調用非靜態內部類,需要先實例化外部類,然后通過外部類對象再去實例化內部類。示例代碼如下:

public class OutClass { private static int a = 0; public void makeInner() {  InnerClass inClass = new InnerClass();  inClass.seeOuter(); } public static void main(String[] args) {  OutClass oClass = new OutClass();  oClass.makeInner();  OutClass.InnerClass innerClass = new OutClass().new InnerClass();  innerClass.seeOuter(); } class InnerClass {  public void seeOuter() {   System.out.println(a);   a++;  } }}

運行結果:

01

內部類的this引用

普通的類可以使用this引用當前的對象,內部類也是如此。但是假若內部類想引用外部類當前的對象呢?可以使用如下方式:

外部類名.this

示例代碼如下:

public class OutClass { private static int a = 0; public void makeInner() {  InnerClass inClass = new InnerClass();  inClass.seeOuter(); } public static void main(String[] args) {  OutClass oClass = new OutClass();  oClass.makeInner();  OutClass.InnerClass innerClass = new OutClass().new InnerClass();  innerClass.seeOuter(); } class InnerClass {  public void seeOuter() {   System.out.println(this);   System.out.println(OutClass.this);  } }}


靜態內部類

上面介紹了非靜態內部類,接下來我們學習神馬是靜態內部類。

靜態內部類就是在外部類中扮演一個靜態成員的角色,創建靜態內部類和創建非靜態內部類的形式很相似,只是class前面多了一個static修飾符。

    注意,外部類是不可能使用static修飾符進行修飾的。

示例代碼如下:

class OutClass { static class InnerClass { }}


用javac命令編譯一下,可以看到一樣都是有兩個.class文件,如下圖所示:

201572994701880.jpg (583×69)

從外部類的非靜態方法中實例化靜態內部類

從外部類中訪問靜態內部類,和在外部類中訪問非靜態內部類是一樣的。但是,需要注意一點,此時靜態內部類只能訪問外部類的靜態成員,無法訪問非靜態成員了。

示例代碼如下:

public class OutClass { private static int a = 0; private int b = 1; public void makeInner() {  InnerClass inClass = new InnerClass();  inClass.seeOuter(); } public static void main(String[] args) {  OutClass oClass = new OutClass();  oClass.makeInner(); } static class InnerClass {  public void seeOuter() {   System.out.println(this);   System.out.println(a);   // System.out.println(b);  } }}


執行結果如下:

OutClass$InnerClass@79a3400


從外部類靜態方法中實例化靜態內部類

    注意:
    因為靜態內部類是外部類的靜態成員,而靜態成員是跟類綁定,而不是跟類實例化的對象綁定。所以,在外部類的靜態方法中實例化內部類,是不需要先實例化外部類的。

示例代碼如下:

public class OutClass { private static int a = 0; private int b = 1; public void makeInner() {  InnerClass inClass = new InnerClass();  inClass.seeOuter(); } public static void main(String[] args) {  OutClass oClass = new OutClass();  oClass.makeInner();  OutClass.InnerClass inClass = new OutClass.InnerClass();  inClass.seeOuter(); } static class InnerClass {  public void seeOuter() {   System.out.println(this);   System.out.println(a);   // System.out.println(b);  } }}

匿名內部類

匿名內部類在Android應用開發中簡直是泛濫,各種listener對象的實現很多都是通過匿名內部類。

匿名內部類從名字上就可以知道這是代表沒有類名的內部類,通常用來簡化代碼。

相信寫Java的同學都使用過線程,那Thread的時候我們可以傳一個Runnable對象,也可以傳一個匿名內部類。示例代碼如下:

public class OutClass { public void testAnonymousClass() {  Thread t = new Thread(new Runnable() {   @Override   public void run() {    for (int i = 0; i < 10; i ++) {     System.out.println(i);     try {      Thread.sleep(500);     } catch (InterruptedException e) {      e.printStackTrace();     }    }   }  });  t.start();  System.out.println("another thread is running..."); } public static void main(String[] args) {  OutClass oClass = new OutClass();  oClass.testAnonymousClass(); }}

執行結果如下:

another thread is running...

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
18性欧美xxxⅹ性满足| 国产成人精品日本亚洲| 一本色道久久88亚洲综合88| 91成人精品网站| 日韩av免费一区| 激情亚洲一区二区三区四区| 国产精品88a∨| 91精品国产乱码久久久久久久久| 国产精品天天狠天天看| 久久韩国免费视频| 久久婷婷国产麻豆91天堂| 中文字幕日韩高清| 亚洲激情视频在线播放| 日韩资源在线观看| 亚洲日本中文字幕| 国产精品美女www爽爽爽视频| 亚洲国产成人精品久久久国产成人一区| 亚洲国产欧美一区二区三区同亚洲| 欧美日韩在线免费观看| 国产一区二区三区日韩欧美| 91在线观看免费高清完整版在线观看| 成人乱人伦精品视频在线观看| 91久久国产综合久久91精品网站| 国产日产久久高清欧美一区| 亚洲成人av片在线观看| 欧美激情免费在线| 91免费综合在线| 日韩av电影在线免费播放| 大量国产精品视频| 欧美午夜精品伦理| 中文字幕精品久久久久| 国产精品中文在线| 中文字幕精品一区二区精品| 欧美国产精品人人做人人爱| 国产精品久久久久av免费| 最近中文字幕mv在线一区二区三区四区| 国产亚洲精品久久| 国产精品偷伦视频免费观看国产| 成人精品福利视频| 国产一区二区三区直播精品电影| 国产精品影院在线观看| 久久亚洲精品网站| 欧洲一区二区视频| 一本大道香蕉久在线播放29| 日韩精品中文字幕在线观看| 亚洲欧美综合精品久久成人| 欧美性猛交xxxx| 欧美激情视频网址| 精品调教chinesegay| 欧美日韩中国免费专区在线看| 美日韩精品视频免费看| 2023亚洲男人天堂| 亚洲女人被黑人巨大进入| 日韩三级成人av网| 色香阁99久久精品久久久| 97在线观看免费高清| 欧美成人性色生活仑片| 国产精品高清在线观看| 久久亚洲精品中文字幕冲田杏梨| 一区二区国产精品视频| 亚洲女人天堂视频| 国产午夜精品全部视频在线播放| 亚洲第一区中文99精品| 久久久精品亚洲| 欧美精品在线观看| 欧美最猛性xxxxx亚洲精品| 亚洲天堂男人天堂女人天堂| 欧美国产激情18| 精品视频在线播放| 日韩成人在线网站| 欧美黑人性猛交| 高清亚洲成在人网站天堂| 8090理伦午夜在线电影| 欧美性69xxxx肥| 欧美二区乱c黑人| 亚洲在线免费观看| 亚洲精品久久久久久久久久久久久| 欧美性猛交xxxx久久久| 国产精品小说在线| 亚洲欧美一区二区激情| 日韩久久免费视频| 亚洲色图50p| 国产视频久久久久| 国模叶桐国产精品一区| 国产精品免费一区| 热久久美女精品天天吊色| 国产精品亚洲第一区| 精品国产欧美一区二区三区成人| 久久久噜噜噜久噜久久| 黑人巨大精品欧美一区免费视频| 国内免费精品永久在线视频| 亚洲欧洲日韩国产| 欧美精品生活片| 亚洲一区二区久久久久久| 最近2019中文免费高清视频观看www99| 国产精品第七十二页| 日日狠狠久久偷偷四色综合免费| 欧美激情久久久| 国产成人亚洲综合| 在线视频国产日韩| 欧美又大粗又爽又黄大片视频| 久久亚洲春色中文字幕| 久久精品人人做人人爽| 色偷偷亚洲男人天堂| 日韩免费在线看| 琪琪亚洲精品午夜在线| 亚洲电影免费观看高清完整版| 亚洲精品一区二区网址| 欧美人在线视频| 91成人国产在线观看| 亚洲国产成人在线视频| 97在线日本国产| 国产精品久久久久高潮| 国产综合久久久久久| www.久久久久久.com| 97在线看福利| 最近2019中文字幕mv免费看| 亚洲在线免费看| 91精品视频大全| 国产国产精品人在线视| 国产精品久久久久久久久久99| 日韩美女毛茸茸| 欧美性生交大片免费| 国产免费成人av| 久久成人精品视频| 欧美性猛交xxxx富婆| 午夜精品久久久久久久99热浪潮| 亚洲国产精品一区二区久| 亚洲男人av电影| 俺去了亚洲欧美日韩| 亚洲国内精品视频| 欧美电影在线观看网站| 69视频在线免费观看| 97精品视频在线观看| 亚洲一区二区三区四区视频| 久久精品久久久久久| 日韩精品极品视频免费观看| 国产色综合天天综合网| 欧美丝袜美女中出在线| 青青久久av北条麻妃海外网| 欧美成人免费在线观看| 亚洲视频第一页| 国产成人91久久精品| 成人欧美一区二区三区黑人| 国产成人精品电影| 久久国产精品免费视频| 国内精品一区二区三区| 色妞色视频一区二区三区四区| 97国产精品人人爽人人做| 亚洲高清久久久久久| 国产xxx69麻豆国语对白| 国产精品ⅴa在线观看h| 精品国偷自产在线| 亚洲在线观看视频| 国产黑人绿帽在线第一区| 在线观看国产精品日韩av| 亚洲国产成人精品女人久久久| 国产精品网红直播| 久久琪琪电影院| 久久精品国产亚洲7777| 国产一区二区丝袜| 久久综合色影院| 成人激情视频在线| 亚洲人成在线观看网站高清|