最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java內(nèi)部類知識匯總

 更新時間:2018年03月02日 08:44:42   作者:好好De活著  
在Java中,在類內(nèi)部可以定義成員變量與方法,還可以在類的內(nèi)部定義類.這種在類的內(nèi)部定義的類稱為內(nèi)部類.而內(nèi)部類所在的類稱為外部類.

Java內(nèi)部類

一、 含義

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

二、 作用

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

三、 原理

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

  public class Outer{
    private String outerName = "outer";
    class Inner{
      private String innerName = "inner";
    }
  }

     編譯后的文件如下圖:

 

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

四、 分類

  Java內(nèi)部類可分為成員內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類、靜態(tài)內(nèi)部類。

  1) 成員內(nèi)部類

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

    import static java.lang.System.out;
    public class Outer{
    private String outerName = "outer";
    //外部類無法直接訪問內(nèi)部類的成員,需要實例化內(nèi)部類對象
    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();
      //實例化內(nèi)部類
      Outer.Inner inner = outer.new Inner();
      inner.show();
    }
  }

  運行結(jié)果:

    inner

    outer

    outer

    成員內(nèi)部類對外部類對象的引用,是通過在this前面加上外部類的名字構(gòu)成的,這種形式叫作

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

 2)  局部內(nèi)部類

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

  import static java.lang.System.out;
  public class Outer{
    private String outerName = "outer";
    public void show(final String str){  //方法參數(shù)為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");
    }
  }

  運行結(jié)果:

      outer:lalala

3)  匿名內(nèi)部類

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

   1、匿名內(nèi)部類不能有構(gòu)造器,匿名內(nèi)部類沒有類名,肯定無法聲明構(gòu)造器。

   2、匿名內(nèi)部類必須繼承或?qū)崿F(xiàn)一個接口,指定給new的類型為匿名類的超類型,匿名類不能有顯示的extends或implements子句,也不能有任何修飾符。

   3、匿名內(nèi)部類和成員內(nèi)部類、局部內(nèi)部類一樣,也不能聲明靜態(tài)成員?!  ?/p>

  import static java.lang.System.out;
  public class Outer{
     private String outerName = "outer";
     public void show(final String str){
        new Inner(){  //實現(xiàn)了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();
  }

  運行結(jié)果:

      outer:lalala

4) 靜態(tài)內(nèi)部類

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

  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); 無法訪問外部類的非靜態(tài)成員
        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(); //直接通過類名訪問靜態(tài)內(nèi)部類
    }
  }

相關(guān)文章

  • SpringAnimation 實現(xiàn)菜單從頂部彈出從底部消失動畫效果

    SpringAnimation 實現(xiàn)菜單從頂部彈出從底部消失動畫效果

    最近做項目遇到這樣一個需求,要求實現(xiàn)一種菜單,菜單從頂部彈入,然后從底部消失,頂部彈入時,有一個上下抖動的過程,底部消失時,先向上滑動,然后再向下滑動消失。下面給大家?guī)砹藢崿F(xiàn)代碼,感興趣的朋友一起看看吧
    2018-05-05
  • java隨機字符串生成示例

    java隨機字符串生成示例

    這篇文章主要介紹了java隨機字符串生成示例,這個字符隨機生成類可以生成多種組合的字符串,比如大+小字符+數(shù)字+符號,需要的朋友可以參考下
    2014-03-03
  • 淺談線程的幾種可用狀態(tài)

    淺談線程的幾種可用狀態(tài)

    下面小編就為大家?guī)硪黄獪\談線程的幾種可用狀態(tài)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 如何優(yōu)雅的實現(xiàn)將Collection轉(zhuǎn)為Map

    如何優(yōu)雅的實現(xiàn)將Collection轉(zhuǎn)為Map

    這篇文章主要介紹了如何優(yōu)雅的實現(xiàn)將Collection轉(zhuǎn)為Map,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Mybatis-plus使用注解 @TableField(exist = false)

    Mybatis-plus使用注解 @TableField(exist = false)

    這篇文章主要介紹了Mybatis-plus使用注解 @TableField(exist = false),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 詳解Android中的Toast源碼

    詳解Android中的Toast源碼

    這篇文章主要介紹了詳解Android中的Toast源碼,Toast使用Java語言實現(xiàn),需要的朋友可以參考下
    2015-07-07
  • java中用String.Join美化代碼的實例講解

    java中用String.Join美化代碼的實例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于java中用String.Join美化代碼的實例講解內(nèi)容,有需要的朋友們可以學習下。
    2020-12-12
  • 淺析Java編程中枚舉類型的定義與使用

    淺析Java編程中枚舉類型的定義與使用

    這篇文章主要介紹了Java編程中枚舉類型的定義與使用,簡單講解了enum關(guān)鍵字與枚舉類的用法,需要的朋友可以參考下
    2016-05-05
  • 淺談什么是SpringBoot異常處理自動配置的原理

    淺談什么是SpringBoot異常處理自動配置的原理

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著SpringBoot異常處理自動配置展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • JAVA集成Freemarker生成靜態(tài)html過程解析

    JAVA集成Freemarker生成靜態(tài)html過程解析

    這篇文章主要介紹了JAVA集成Freemarker生成靜態(tài)html過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06

最新評論

兴业县| 黎平县| 巫溪县| 尚志市| 保定市| 陇西县| 岳池县| 抚顺县| 商洛市| 佳木斯市| 清河县| 福泉市| 洪湖市| 高雄县| 澜沧| 崇明县| 庆阳市| 佛教| 萝北县| 安顺市| 博野县| 建德市| 临沭县| 普安县| 南投县| 司法| 霍山县| 潜山县| 汝阳县| 乌鲁木齐县| 和田县| 绥德县| 玉溪市| 禄丰县| 新建县| 汝南县| 英德市| 襄城县| 乐平市| 长治市| 合水县|