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.