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

Java 內部類完整指南:從基礎語法到匿名類實戰

     編輯:Java 相關知識

什麼是內部類?

在 Java 中,當一個類的定義位於另一個類的內部時,這個內部的類就稱為內部類。內部類可以訪問外部類的所有成員(包括私有成員),這使得它成為實現封裝和邏輯分組的強大工具。

成員內部類

最常見的內部類形式是直接定義在類內部、方法外部的成員內部類。它可以使用 public、protected、private 或包級別的訪問修飾符。

實例化規則

非靜態內部類的實例必須依附於外部類的實例才能創建。語法如下:

OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
// 或合寫為:
OuterClass.InnerClass inner = new OuterClass().new InnerClass();

注意:聲明內部類引用時必須使用 OuterClass.InnerClass 的完整形式。

靜態內部類

若使用 static 修飾內部類,它就成為靜態內部類(實際上是巢狀類)。靜態內部類不需要外部類實例即可創建:

OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass();

關鍵區別:

  • 非靜態內部類可訪問外部類的所有成員(靜態與非靜態)
  • 靜態內部類只能直接訪問外部類的靜態成員
  • 非靜態內部類不能定義靜態成員(常量除外);靜態內部類則可以

局部內部類

定義在方法內部或代碼塊內部的類稱為局部內部類。它的作用域僅限於該方法或塊內,外部不可見。

變量捕獲規則: 局部內部類只能訪問方法中被 final 修飾(或實際上不變)的局部變量。這是因為內部類實例的生命週期可能超過方法執行週期,需要複製變量值。

匿名內部類

匿名內部類是沒有名稱的內部類,定義並實例化合二為一。常用於:

  • 只需創建一個實例
  • 類體很小(建議不超過幾行)
  • 實現介面或繼承類並即刻使用

核心限制

  • 不能有構造器(可用實例初始化塊替代)
  • 不能定義靜態成員
  • 不能是 public/protected/private/static
  • 只能創建一個實例

經典應用場景

事件監聽器(GUI 開發):

button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    }
});

執行緒快速啟動:

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("在新執行緒中執行");
    }
}).start();

總結

內部類是 Java 面向對象特性的重要補充,合理使用能提高封裝性、可讀性與靈活性。掌握四種內部類的區別與適用場景,是進階 Java 開發的必備技能。

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