關于內部類靜態成員的問題
public?class?StatiClass?{ static?int?age=100; private??int?c=89; public?static?void?main(String[]?args)?{ StatiClass?o=new?StatiClass(); System.out.println(o.c); new?A().a(); } public??class?A{//這個地方會報錯,請問為什么內部內中有靜態成員,內部類就一定得是靜態修飾的類? static?int?age=100; String?name="張三"; public?void?a(){ System.out.println(name+"會活到"+age+"歲,那時候是"+StatiClass.age+"個奇跡"); } } }
2016-10-30
一般情況下,如果一個內部類不是被定義成靜態內部類,那么在定義成員變量或者成員方法的時候, 是不能夠被定義成靜態成員變量與靜態成員方法的。也就是說,在非靜態內部類中不可以聲明靜態成員。如現在在一個student類中定義了一個內部類 age,如果沒有將這個類利用static關鍵字修飾,即沒有定義為靜態類,那么在這個內部類中如果要利用static關鍵字來修飾某個成員方法或者成員 變量是不允許的。在編譯的時候就通不過。
2016-10-30
會報錯是因為你在非靜態內部類中定義了靜態變量。
2016-10-30
那為什么主函數main方法可以有static?
2016-10-30
?new?A().a();這段就有問題,只有靜態內部類才能這樣調用
2016-10-30
這樣想,靜態類或靜態成員沒有new之前就已經加載了,而普通類,只有new創建對象的時候才會加載,兩者出現的先后順序就有沖突