1. 程式人生 > >非靜態類中為什不能定義靜態方法

非靜態類中為什不能定義靜態方法

回答方案一:因為靜態方法是可以直接呼叫的,既不建立物件也可以直接呼叫。而非靜態的內部類,它屬於外部類的一個成員類。需要先建立它的例項以後才能呼叫它的方法,當你建立了外部類以後,它的內部類是不存在的,所以你不能在那個物件沒有之前就呼叫它的,就好想,是一個實際存在的東西和一個虛擬存在的東西一樣,實際存在的 東西是不能被虛擬存在的東西所具有的。我可能說的不太明白,你也可以用java的類的定義的要求去推證它的不成立,你會發現那是矛盾的。如果你在非靜態的內部類裡包含靜態的方法。

回答方案二:靜態變數是要佔用記憶體的,在編譯時只要是定義為靜態變量了,系統就會自動分配記憶體給他,而內部類是在宿主類編譯完編譯的,也就是說,必須有宿主類存在後才能有內部類,這也就和編譯時就為靜態變數分配記憶體產生了衝突,因為系統執行:執行宿主類->靜態變數記憶體分配->內部類,而此時內部類的靜態變數先於內部類生成,這顯然是不可能的,所以不能定義靜態變數!