1. 程式人生 > >成員內部類裡面為什麼不能有靜態成員和方法?

成員內部類裡面為什麼不能有靜態成員和方法?

成員內部類裡面為什麼不能有靜態成員和方法?

非靜態內部類不能有靜態成員!

成員內部類必須先例項化外部類物件然後再例項化成員內部類;

 

非static的內部類,在外部類載入的時候,並不會載入它,所以它裡面不能有靜態變數或者靜態方法。
1、static型別的屬性和方法,在類載入的時候就會存在於記憶體中。
2、要使用某個類的static屬性或者方法,那麼這個類必須要載入到jvm中。
基於以上兩點,可以看出,如果一個非static的內部類如果具有static的屬性或者方法,那麼就會出現一種情況:內部類未載入,但是卻試圖在記憶體中建立static的屬性和方法,這當然是錯誤的。原因:類還不存在,但卻希望操作它的屬性和方法。

 

java很多想這類不能共同存在的 一般都與他們的生命週期有關。。。
比如 靜態成員和靜態方法是隨著類的載入而存在的,也就是說內部類的靜態屬性是隨著類的載入的,但是內部類的例項 是建立後才存在的,也就是說其靜態屬性優先存在於他的類例項的存在 這顯然是矛盾的,所以要把內部類設為靜態的 這樣他們的生命週期就是相同了;

 

如果內部類沒有static的話,就需要例項化內部類才能呼叫,說明非static的內部類不是自動跟隨主類載入的,而是被例項化的時候才會載入。
而static的語義,就是主類能直接通過內部類名來訪問內部類中的static方法,而非static的內部類又是不會自動載入的,所以這時候內部類也要static,否則會前後衝突。



摘自:https://www.cnblogs.com/YLQBL/p/6496511.html