java為什么非靜態內部類中不能有static修飾的屬性,但卻可以有常量?


如:
public class InnerClassDemo{
int x;
class A{
static int a = 0;//這樣寫是不合法的.
static final int b=0;//這樣寫是合法的

}
}

 

java類加載順序,首先加載類,執行static變量初始化,接下來執行對象的創建,如果我們要執行代碼中的變量int a 初始化,那么必須先執行加載外部類,再加載內部類,最后初始化靜態變量 a ,問題就出在加載內部類上面,我們可以把內部類看成外部類的非靜態成員,它的初始化必須在外部類對象創建后以后進行,要加載內部類必須在實例化外部類之后完成 ,java虛擬機要求所有的靜態變量必須在對象創建之前完成,這樣便產生了矛盾。
(有點繞,呵呵)
而java常量放在內存中常量池,它的機制與變量是不同的,編譯時,加載常量是不需要加載類的,所以就沒有上面那種矛盾。


免責聲明!

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



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