當我初始化靜態內部類我期待的是外班也被初始化,將打印I should see this as well.
然而這沒有發生,我只得到class Main
作爲輸出Static Nested Class和未初始化外部類
class AA {
static {
System.out.println("I should see this as well.");
}
public static class BB {
BB() {
Object o = Main.class;
System.out.println(o.toString());
}
};
}
public class Test {
public static void main(String[] args) {
new AA.BB();
}
}
有人能幫助我解釋這種行爲。
靜態內部類與它們的外部類不像非靜態類很接近。事實上,您可以將外部類的靜態內部類看作某種名稱空間(或包)。 – Thomas
*靜態嵌套類與其外部類(和其他類)的實例成員交互,就像任何其他頂級類一樣。實際上,爲了方便打包,靜態嵌套類在行爲上是嵌套在另一個頂級類中的頂級類。[source](http://docs.oracle.com/javase/tutorial/java/javaOO /nested.html) –
編譯完成後,它們已經足夠分離,您可以在沒有其他類的情況下加載一個類。 – khelwood