亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java內部類原理與用法實例總結

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

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

一、非靜態(tà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)內部類
  class InnerClass {
    // 2.0非靜態(tà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內部類做為外部類的實例成員,可以隨意訪問其他外部類成員
      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指針
    // 因為等同于this.InnerClass inner=new this.InnerClass();
    // InnerClass inner=new InnerClass();
  }
}

運行結果:

outclass
innerclass
outclass

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

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

3.非靜態(tài)內部類可以隨意訪問外部類的成員,因為它們都是外部類的成員,等級一樣。

4.若要得到內部類的實例,可以

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

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

public class OutClass {
  private String name = "outclass";
  private static int age = 10;
  // 靜態(tà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();
  }
}

運行結果:

10
outclass

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

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

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

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

三、局部類

1.匿名內部類

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...");
      }
    });
  }
}

運行結果:

i'm drawing...

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

2.閉包與回調

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();
  }
}

運行結果:

private name

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

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

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

更多java相關內容感興趣的讀者可查看本站專題:《Java面向對象程序設計入門與進階教程》、《Java數據結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

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

相關文章

  • 深入Sqlite多線程入庫的問題

    深入Sqlite多線程入庫的問題

    本篇文章是對Sqlite多線程入庫的問題進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Mybatis的動態(tài)拼接條件方式

    Mybatis的動態(tài)拼接條件方式

    這篇文章主要介紹了Mybatis的動態(tài)拼接條件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • javaweb中ajax請求后臺servlet(實例)

    javaweb中ajax請求后臺servlet(實例)

    下面小編就為大家?guī)硪黄猨avaweb中ajax請求后臺servlet(實例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • IDEA中Spring項目的工程構建

    IDEA中Spring項目的工程構建

    這篇文章主要介紹了IDEA中Spring項目的工程構建,Spring框架是輕量級的JavaEE框架,可以解決企業(yè)應用開發(fā)的復雜性,有兩個核心部分:IOC和Aop,今天來學習如何構建spring項目,需要的朋友可以參考下
    2023-05-05
  • 詳解Java中final的用法

    詳解Java中final的用法

    本文主要介紹了Java中final的使用方法,final是java的關鍵字,本文就詳細說明一下它的使用方法,需要的朋友可以參考下
    2015-08-08
  • Netty之使用DelimiterBasedFrameDecoder進行消息分隔詳解

    Netty之使用DelimiterBasedFrameDecoder進行消息分隔詳解

    這篇文章主要介紹了Netty之使用DelimiterBasedFrameDecoder進行消息分隔詳解,在使用Netty進行TCP消息傳輸時,為了上層協(xié)議能夠對消息正確區(qū)分,避免粘包和拆包導致的問題,一般可以通過消息定長、將回車換行符作為消息結束符,需要的朋友可以參考下
    2023-12-12
  • Java使用代碼模擬高并發(fā)操作的示例

    Java使用代碼模擬高并發(fā)操作的示例

    本篇文章主要介紹了Java使用代碼模擬高并發(fā)操作的示例,Java通過代碼模擬高并發(fā)可以以最快的方式發(fā)現(xiàn)我們系統(tǒng)中潛在的線程安全性問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java如何使用SSLContext請求https鏈接

    Java如何使用SSLContext請求https鏈接

    這篇文章主要介紹了Java如何使用SSLContext請求https鏈接問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java Netty核心模塊超詳細梳理

    Java Netty核心模塊超詳細梳理

    Netty是一個java開源項目,是一個異步的、基于事件驅動的網絡應用框架,用以開發(fā)高性能、高可用的網絡io程序,這篇文章主要介紹了Netty核心模塊
    2022-11-11
  • Spring Boot 集成Shiro的多realm配置過程

    Spring Boot 集成Shiro的多realm配置過程

    這篇文章主要介紹了Spring Boot 集成Shiro的多realm配置,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10

最新評論