說說 Java 的靜態內部類

Java 的靜態內部類就是定義在一個類的內部,並且標註爲 static 的類。由於類是靜態的,所以不需要通過外圍類的實例來創建。下面是一個示例:

public class Outer {

    private static final Logger log = LoggerFactory.getLogger(Outer.class);

    private static class Inner {
        public int value() {
            return 1;
        }
    }

    public static Inner inner() {
        return new Inner();
    }

    public static void main(String[] args) {
        Inner c = inner();
        log.info("c.value() -> {}。", c.value());
    }
}

外圍類 Outer 定義了一個私有、靜態內部類 Inner。然後定義了一個靜態方法 inner(),返回 Inner 類。這個靜態方法 inner() 就是外部類調用該內部類的橋樑。

靜態內部類與非靜態內部類之間的比較:

比較 靜態內部類 非靜態內部類
創建 外圍類.方法 外圍類實例.方法
訪問外圍類 能訪問靜態屬性,不能訪問非靜態屬性 不能訪問靜態屬性,可以訪問非靜態屬性

比如在外圍類 Outer 中分別定義了一個私有、非靜態屬性 i,與一個私有、靜態屬性 j。那麼靜態內部類 Inner 只能訪問 私有、靜態屬性 j:

public class Outer {

    private static final Logger log = LoggerFactory.getLogger(Outer2.class);

    // Inner 不可訪問
    private int i;

    // Inner 可訪問
    private static int j;

    private static class Inner {
        public int value() {

            return 1;
        }
    }
}

參考:
BruceEckel, 埃克爾, 陳昊鵬. Java編程思想[J]. 機械工業出版社, 2007. p201-202.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章