難怪當初看JAVA我會不由自主的想先跳過
沒事不要寫這麼複雜關係的程式碼,
如果要用到一本書要放在旁邊就是了
靜態外部類別的內部類別同樣是被放在Global記憶體區塊,
所以內部類別不管有沒有宣告static,都可互相看見而存取
(其實一般使用靜態類別時,本身內部就沒有設定static,
成員變數本來就互相看見,多設定一道static,
它還是放在Global記憶體內,當然還是會可以看見)
靜態類別本身是沒有this指標,也不需要new建立實體
但靜態內部類別的non-static成員會有this指標指向自己,
(這一段話我感到有點含糊,靜態內部類別裡的non-static成員為什麼會有this指標?)
所以靜態內部類別可以同時定義static和non-static成員,
因此,也可用new來建立靜態內部類別的實體
class MyOuter {
private int x = 7;
static private int sx = 9;
static class MyStatic {
private int x = 77;
static private int sx = 99;
public void fooA() { // non-static member
System.out.println("static inner class A.");
System.out.println(sx); //
System.out.println(MyOuter.sx); //
System.out.println(x); //
System.out.println(this.x); //
//static inner class中沒有MyOuter的this指標
//System.out.println(MyOuter.this.x);
}
public static void fooB() { // static member
System.out.println("static inner class B.");
System.out.println(sx);
System.out.println(MyOuter.sx);
}
}
}
public class StaticInnerClass {
public static void main(String[] args) {
//MyOuter.MyStatic.fooB();
MyOuter.MyStatic s = new MyOuter.MyStatic();
s.fooA();
s.fooB();
}
執行結果:
99
9
77
77
99
9
0 意見 :
張貼留言