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

Java 靜態內部類:不綁定外部實例、接口中定義、測試床模式

     編輯:Java 相關知識

static 內部類的兩大特征

  1. 創建實例不需要外部類實例。
  2. 實例中不能訪問外部類非靜態成員(無 this 綁定)。

限制:不可有 static 成員(除編譯期常數)

內部類定義處於外部類「非頂層」,Java 語法禁止非頂層類擁有 static 字段/方法/內部類。static 內部類本身是靜態成員,但其內部不能再定義靜態成員。

典型應用 1:工廠方法返回接口實現

public class Parcel10 {
    private static class PContents extends Contents { ... }
    protected static class PDestination implements Destination { ... }
    public static Destination dest(String s) { return new PDestination(s); }
    public static Contents cont() { return new PContents(); }
    // main 中無需 Parcel10 實例直接調用靜態工廠方法
}

典型應用 2:接口中定義靜態內部類

interface IInterface {
    static class Inner { int i, j, k; void f() {} } // 僅佔用接口命名空間
}

不違反「接口無實現」規則,因類是靜態的,不依賴接口實例。

典型應用 3:測試床模式(不污染發布版)

class TestBed {
    void f() { println("f()"); }
    public static class Tester {
        public static void main(String[] args) {
            new TestBed().f();
        }
    }
}
// 運行:java TestBed$Tester
// 發布時可刪除 TestBed$Tester.class

優點:測試代碼與產品代碼同文件、同類加載上下文,發布時物理刪除 class 文件即可剝離,零侵入。

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