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


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

成員內部類必須先實例化外部類對象然后再實例化成員內部類;

 

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

 

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

 

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

 

摘自:http://bbs.csdn.net/topics/390607261


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM