一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java內部類知識匯總

Java內部類知識匯總

2021-04-09 11:08好好De活著 Java教程

在Java中,在類內部可以定義成員變量與方法,還可以在類的內部定義類.這種在類的內部定義的類稱為內部類.而內部類所在的類稱為外部類.

Java內部類

一、 含義

  在Java編程語言里,程序是由類(class)構建而成的。在一個類的內部也可以聲明類,我們把這樣的類叫做內部類。

二、 作用

•實現了更好的封裝,我們知道,普通類(非內部類)的訪問修飾符不能為private或protected,而內部類可以。當我們將內部類聲明為private時,只有外部類可以訪問內部類,很好地隱藏了內部類。
•內部類可以繼承(extends)或實現(implements)其他的類或接口,而不受外部類的影響。
•內部類可以直接訪問外部類的字段和方法,即使是用private修飾的,相反的,外部類不能直接訪問內部類的成員。

三、 原理

  內部類是一個編譯時的概念,編譯后會生成兩個獨立的class文件,如下:

?
1
2
3
4
5
6
public class Outer{
  private String outerName = "outer";
  class Inner{
    private String innerName = "inner";
  }
}

     編譯后的文件如下圖:

 Java內部類知識匯總

  編譯后Outer.Inner被重命名為Outer$Inner,句點(.)被替換成了美元符號($)。

四、 分類

  Java內部類可分為成員內部類、局部內部類、匿名內部類、靜態內部類。

  1) 成員內部類

    成員內部類可以看成是外部類的一個成員,在成員內部類中無法聲明靜態成員,但static final字段是個例外。我們知道加載類時,會先初始化靜態成員,如果成員內部類有靜態成員,那么內部類就會在外部類之前生成,而內部類是為外部類服務的,內部類在外部類之前就生成可能會脫離掌控。在實例化成員內部類時,成員內部類會持有一個外部類當前對象的引用,這樣在成員內部類中就可以直接訪問外部類的成員,即使是private修飾的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  import static java.lang.System.out;
  public class Outer{
  private String outerName = "outer";
  //外部類無法直接訪問內部類的成員,需要實例化內部類對象
  private Inner inner = new Inner();
  public class Inner{
     private String innerName = "inner";
    public void show(){
      out.println(outerName); //可以直接訪問外部類的成員
    }
  }
  public void show(){
     out.println(inner.innerName);
    inner.show();
  }
  public static void main(String[] args){
     Outer outer = new Outer();
    outer.show();
    //實例化內部類
    Outer.Inner inner = outer.new Inner();
    inner.show();
  }
}

  運行結果:

    inner

    outer

    outer

    成員內部類對外部類對象的引用,是通過在this前面加上外部類的名字構成的,這種形式叫作

  限定-this,out.println(outerName)與out.println(Outer.this.outerName)是等價的。

 2)  局部內部類

  局部內部類的使用和成員內部類的使用基本一致,只是局部內部類定義在外部類的方法中,就像局部變量一樣,并不是外部類的成員。局部內部類在方法外是無法訪問到的,但它的實例可以從方法中返回,并且實例在不再被引用之前會一直存在。局部內部類也可以訪問所在方法的局部變量、方法參數等,限制是局部變量或方法參數只有在聲明為final時才能被訪問。  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import static java.lang.System.out;
public class Outer{
  private String outerName = "outer";
  public void show(final String str){  //方法參數為final類型
    class Inner{
      public void print(){
        out.println(outerName+str);
      }
    }
    Inner inner = new Inner();
    inner.print();
  }
  public static void main(String[] args){
    Outer outer = new Outer();
    outer.show(":lalala");
  }
}

  運行結果:

      outer:lalala

3)  匿名內部類

  可以把匿名內部類想象成是沒有類名的局部內部類,匿名內部類有以下特點:

   1、匿名內部類不能有構造器,匿名內部類沒有類名,肯定無法聲明構造器。

   2、匿名內部類必須繼承或實現一個接口,指定給new的類型為匿名類的超類型,匿名類不能有顯示的extends或implements子句,也不能有任何修飾符。

   3、匿名內部類和成員內部類、局部內部類一樣,也不能聲明靜態成員。   

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import static java.lang.System.out;
public class Outer{
   private String outerName = "outer";
   public void show(final String str){
      new Inner(){  //實現了Inner接口
         public void print(){
            out.println(outerName+str);
         }
      }.print();
   }
   public static void main(String[] args){
       Outer outer = new Outer();
       outer.show(":lalala");
    }
}
interface Inner{
    void print();
}

  運行結果:

      outer:lalala

4) 靜態內部類

  靜態內部類,有的書上也稱為嵌套類,聲明它時需要用static修飾符,靜態內部類不同于前三種內部類,靜態內部類不會持有外部類當前對象的引用,所以在靜態內部類中無法訪問外部類的非靜態成員,可以這么說,靜態內部類不依賴于外部類。 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import static java.lang.System.out;
public class Outer{
  private String outerName = "outer";
  private static int id = 123;
  private Inner inner = new Inner();
  public static class Inner{
    public void print1(){
      //out.println(outerName); 無法訪問外部類的非靜態成員
      out.println(id);
    }
    public static void print2(){
      out.println(id);
    }
  }
  public void show(){
    inner.print1();
  }
  public static void main(String[] args){
    Outer outer = new Outer();
    outer.show();
    Outer.Inner.print2(); //直接通過類名訪問靜態內部類
  }
}

原文鏈接:http://www.cnblogs.com/brave7/p/8486034.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲性久久久影院 | 91久久99热青草国产 | 免费网站国产 | 久久国产视频网站 | 日本人和黑人一级纶理片 | 男男gaygays中国 | 视频在线观看一区二区三区 | 亚洲欧美国产在线 | 91香蕉影院 | 日本hdxxxx护士 | 花唇肿胀无法合拢双性 | 99国内精品久久久久久久黑人 | 毛片免费全部免费观看 | 性欧美金发洋妞xxxxbbbb | 小早川怜子在线播放精品 | 婷婷综合在线 | 国产成人在线视频播放 | 亚洲AV无码国产精品色在线看 | avtt手机版 | 欧美一区二区三区免费看 | 亚洲AV久久无码精品九号 | 扒开双腿猛进入爽爽视频ai | 亚洲精品αv一区二区三区 亚洲精品91大神在线观看 | 日本一区二区视频免费播放 | 2021年国内自拍 | 国产精品视频久 | 女同69式互添在线观看免费 | 91高清国产经典在线观看 | 午夜福利自怕 | 肥胖老寡妇做性 | 婷婷综合久久中文字幕 | 99久久er这里只有精品17 | 狠狠夜夜久久日日91av | 国产私拍精品88福利视频 | 四虎影视永久在线观看 | tube性睡觉hd| 护士柔佳 | 91日本在线 | 男模chinesegayxxxx| 久久99热狠狠色AV蜜臀 | 好大用力深一点视频 |