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

Java內(nèi)部類原理與用法實(shí)例總結(jié)

 更新時間:2018年08月27日 09:37:50   作者:喜歡特別冷的冬天下著雪  
這篇文章主要介紹了Java內(nèi)部類原理與用法,結(jié)合實(shí)例形式總結(jié)分析了非靜態(tài)內(nèi)部類、靜態(tài)內(nèi)部類、局部類等相關(guān)概念、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Java內(nèi)部類原理與用法。分享給大家供大家參考,具體如下:

一、非靜態(tài)內(nèi)部類

public class OutClass {
  private String name = "outclass";
  public void show() {
    System.out.println(this.name);
  }
  public void innerShow() {
    InnerClass inner = new InnerClass();
    inner.show();
    inner.outShow();
  }
  // 非靜態(tài)內(nèi)部類
  class InnerClass {
    // 2.0非靜態(tài)內(nèi)部類不能有靜態(tài)變量的聲明
    // public static int age=0;
    private String name = "innerclass";
    public void show() {
      System.out.println(this.name);
    }
    public void outShow() {
      // 3.0內(nèi)部類做為外部類的實(shí)例成員,可以隨意訪問其他外部類成員
      System.out.println(OutClass.this.name);
    }
  }
  public static void main(String[] args) {
    OutClass out = new OutClass();
    out.show();
    out.innerShow();
    // 1.0下面一行編譯報錯,靜態(tài)方法無法訪問this指針
    // 因?yàn)榈韧趖his.InnerClass inner=new this.InnerClass();
    // InnerClass inner=new InnerClass();
  }
}

運(yùn)行結(jié)果:

outclass
innerclass
outclass

1.外部類不能直接訪問非靜態(tài)內(nèi)部類,必須在外部類中保存內(nèi)部類的引用間接訪問。
2.非靜態(tài)內(nèi)部類中不能有靜態(tài)屬性。

個人理解:非靜態(tài)內(nèi)部類是外部類的實(shí)例成員,它屬于外部類的實(shí)例對象所擁有,若內(nèi)部類有靜態(tài)屬性,那么屬性必定屬于內(nèi)部類所有,即所有的內(nèi)部類實(shí)例對象都共享這個屬性。但是這個內(nèi)部類已經(jīng)屬于外部類的實(shí)例對象所擁有了,貌似是1:1的關(guān)系,除非外部類的對象保存了n多份內(nèi)部類實(shí)例的引用,那這樣內(nèi)部類的靜態(tài)屬性才有存在的必要,可這么做就沒有什么意義了。

3.非靜態(tài)內(nèi)部類可以隨意訪問外部類的成員,因?yàn)樗鼈兌际峭獠款惖某蓡T,等級一樣。

4.若要得到內(nèi)部類的實(shí)例,可以

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

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

public class OutClass {
  private String name = "outclass";
  private static int age = 10;
  // 靜態(tài)內(nèi)部類
  static class InnerClass {
    public void show() {
      // 1.0
      System.out.println(new OutClass().name);
    }
    public void outShow() {
      // 2.0
      System.out.println(age);
    }
  }
  public static void main(String[] args) {
    // 3.0
    OutClass.InnerClass inner = new OutClass.InnerClass();
    inner.outShow();
    inner.show();
  }
}

運(yùn)行結(jié)果:

10
outclass

1.靜態(tài)內(nèi)部類不能隨意訪問外部類的實(shí)例成員,必須引用外部類的對象。
2.靜態(tài)內(nèi)部類可以隨意訪問外部類的類成員。
3.若要獲取靜態(tài)內(nèi)部類的實(shí)例,則形式如

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

注意與非靜態(tài)內(nèi)部類獲取實(shí)例的區(qū)別:

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

三、局部類

1.匿名內(nèi)部類

interface IDraw {
  void draw();
}
public class OutClass {
  public void createCircle(IDraw obj) {
    obj.draw();
  }
  public static void main(String[] args) {
    OutClass out = new OutClass();
    out.createCircle(new IDraw() {
      public void draw() {
        System.out.println("i'm drawing...");
      }
    });
  }
}

運(yùn)行結(jié)果:

i'm drawing...

在調(diào)用多態(tài)形式的方法createCircle(IDraw obj)時,參數(shù)用到了new IDraw(){ },做為接口來說是不能直接實(shí)例化的,這里的new IDraw()并不是直接實(shí)例化,而是創(chuàng)建了匿名內(nèi)部類。

2.閉包與回調(diào)

interface IDraw {
  void draw();
}
public class OutClass {
  private String name = "private name";
  public Closure getClosure() {
    return new Closure();
  }
  class Closure implements IDraw {
    public void draw() {
      System.out.println(OutClass.this.name);// name
    }
  }
  public static void main(String[] args) {
    OutClass out = new OutClass();
    out.getClosure().draw();
  }
}

運(yùn)行結(jié)果:

private name

內(nèi)部類可以像其他類一樣靈活的實(shí)現(xiàn)各種接口和繼承,并且可以將外部類的屬性和方法綁定到自身中,形成閉包。而在外部類中提供了方法供外界獲取內(nèi)部類的引用,因?yàn)閮?nèi)部類的方法靈活的訪問了外部類的許多信息,甚至是私有信息,獲得了這個對象后可以反過來調(diào)用外部類的方法和函數(shù)形成回調(diào)。

其實(shí)上面只是有閉包的形式,并不算是真正的閉包,閉包的定義里主要是綁定方法里的變量,但是java是無法實(shí)現(xiàn)方法里的內(nèi)部類還能訪問方法變量的,因?yàn)闊o法實(shí)現(xiàn)真正的閉包。

java內(nèi)部類有許多用處,比如利用內(nèi)部類實(shí)現(xiàn)多個接口可以模擬多繼承;比如讓內(nèi)部類成為輔助外部類的工具類,來幫助外部類實(shí)現(xiàn)更好的邏輯與擴(kuò)展。

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • IDEA部署Tomcat的超詳細(xì)圖文教程

    IDEA部署Tomcat的超詳細(xì)圖文教程

    最近迫于無奈從我哪破舊的Eclipse轉(zhuǎn)換到了IDEA,然后就是超多的不習(xí)慣,下面這篇文章主要給大家介紹了關(guān)于IDEA部署Tomcat的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • SpringBoot前后端分離跨域問題:狀態(tài)碼403拒絕訪問解決辦法

    SpringBoot前后端分離跨域問題:狀態(tài)碼403拒絕訪問解決辦法

    這篇文章主要給大家介紹了關(guān)于SpringBoot前后端分離跨域問題:狀態(tài)碼403拒絕訪問的解決辦法,403是被服務(wù)器拒絕了,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • java的JsonObject對象提取值方法

    java的JsonObject對象提取值方法

    下面小編就為大家分享一篇java的JsonObject對象提取值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 一款不可錯過的Java應(yīng)用診斷利器Arthas

    一款不可錯過的Java應(yīng)用診斷利器Arthas

    Arthas是一款由阿里巴巴開源的Java應(yīng)用診斷利器,它可以幫助開發(fā)人員在運(yùn)行時對Java應(yīng)用進(jìn)行調(diào)試和診斷,解決線上問題,本文將簡單的描述一下該工具的用法和常用命令,以勾起大家對此工具應(yīng)用的興趣
    2023-06-06
  • java方法重寫時需要注意的問題

    java方法重寫時需要注意的問題

    大家好,本篇文章主要講的是java方法重寫時需要注意的問題,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 23種設(shè)計模式(6)java裝飾者模式

    23種設(shè)計模式(6)java裝飾者模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計模式之java裝飾者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • SpringBoot整合郵件發(fā)送的四種方法

    SpringBoot整合郵件發(fā)送的四種方法

    這篇文章主要介紹了SpringBoot整合郵件發(fā)送的四種方法,SpringBoot中集成了發(fā)送郵件的功能,本文做了進(jìn)一步優(yōu)化,需要的朋友可以參考下
    2023-03-03
  • 解讀@ResponseBody與@RequestBody注解的用法

    解讀@ResponseBody與@RequestBody注解的用法

    這篇文章主要介紹了Spring MVC中的@ResponseBody和@RequestBody注解的用法,@ResponseBody注解用于將Controller方法的返回對象轉(zhuǎn)換為指定格式(如JSON)并通過Response響應(yīng)給客戶端,@RequestBody注解用于讀取HTTP請求的內(nèi)容
    2024-11-11
  • SpringBoot整合Druid數(shù)據(jù)庫連接池的方法

    SpringBoot整合Druid數(shù)據(jù)庫連接池的方法

    Druid是Java語言中最好的數(shù)據(jù)庫連接池。Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能。這篇文章主要介紹了SpringBoot整合Druid數(shù)據(jù)庫連接池的方法,需要的朋友可以參考下
    2020-07-07
  • SSH框架網(wǎng)上商城項(xiàng)目第10戰(zhàn)之搭建商品類基本模塊

    SSH框架網(wǎng)上商城項(xiàng)目第10戰(zhàn)之搭建商品類基本模塊

    這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項(xiàng)目第10戰(zhàn)之搭建商品類基本模塊的相關(guān)資料,有一定的實(shí)用性,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評論

荆州市| 青河县| 都昌县| 新河县| 宝应县| 金湖县| 招远市| 辽源市| 襄垣县| 库车县| 大同市| 石景山区| 勃利县| 屯留县| 安达市| 嘉定区| 巨野县| 临朐县| 松溪县| 天台县| 建宁县| 驻马店市| 沐川县| 利川市| 莆田市| 漳州市| 四平市| 台北县| 墨竹工卡县| 锡林浩特市| 德惠市| 南投市| 随州市| 凌源市| 嵩明县| 柳江县| 象山县| 秦皇岛市| 阿克| 崇阳县| 澜沧|