首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 內部類全景解析:四大類型、實例化規則、this 引用與 Android 源碼實戰模式

     編輯:Java 相關知識

內部類是 Java 實現多重繼承、回調、封裝邏輯的關鍵機制,Android 源碼大量使用。本文系統梳理非靜態內部類、靜態內部類、局部內部類、匿名內部類的定義、編譯產物、實例化語法、訪問權限邊界,並深入剖析 OuterClass.this 與 InnerClass.this 的引用差異。

四大類型核心對比

類型定義位置訪問外部成員實例化語法典型場景
非靜態內部類類成員位置任意(含 private)new Outer().new Inner()需持有外部引用的狀態物件
靜態內部類類成員位置 + static僅 static 成員new Outer.Inner()工具類、Builder、單例持有者
局部內部類方法/代碼塊內final/Effectively final 變量方法內直接 new臨時邏輯封裝、線程任務
匿名內部類表達式位置同局部內部類new Interface() { ... }事件監聽、Runnable、策略模式

編譯產物與訪問權限

  • 編譯生成 OuterClass$InnerClass.class,獨立文件。
  • 內部類可自由訪問外部類 private 成員(編譯器生成合成訪問器)。
  • 靜態內部類失去對外部實例成員的訪問權,僅能訪問靜態成員。

非靜態內部類實例化全景

// 外部類非靜態方法中
InnerClass inner = new InnerClass(); // 隱含 this 引用

// 外部類靜態方法 / 外部其他類中
OuterClass.InnerClass inner = new OuterClass().new InnerClass(); // 顯式提供外部實例

this 引用辨析

  • this → 內部類實例本身。
  • OuterClass.this → 外部類實例(唯一獲取外部實例的標準方式)。

匿名內部類 Android 實戰模式

new Thread(new Runnable() {
    @Override public void run() {
        // 耗時任務
    }
}).start();

掌握內部類機制,能讀懂 Android 源碼中 Handler、AsyncTask、View.setOnClickListener 等核心組件的設計精髓,也能寫出更優雅的回調與封裝代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved