類中的static變量在創建類時會創建多次嗎


//代碼如下:其中小孩類中定義了一個類變量total,初始化為0,我就問,每新建一個小孩對象total不會重置為0么?求大神幫忙。
//我認為每創建一個新對象,就會執行static int total=0; 這樣一來豈不是最后total==1; 可是執行結果為3. 我錯在哪了?
public class demo3 { public static void main(String args[]) { Child ch1=new Child(2,"xiaoming"); ch1.joinGame(); Child ch2=new Child(4,"xiaoqiang"); ch2.joinGame(); Child ch3=new Child(6,"xiaohong"); ch3.joinGame(); System.out.println("小孩總數是:"+ch3.total); } } class Child { int age; String name; static int total; public Child(int age,String name) { this.age=age; this.name=name; } public void joinGame() { total++; System.out.println("有一個小孩加入了"); } }

這個問題其實很簡單,沒帶static的變量屬於對象,帶了static的變量屬於類本身,每一個類對只應一個class,在這個class被加載時,系統會在堆內存中為它分配一個空間,但每一個類可以創建出它的多個實例(也就是對象),當你在創建對像時系統會為你的每一個對像在堆內存中分配空間,這些對象都保存了對類中static的一個引用,也就是說不管你創建多少個對像,它們都指向同一個static變量,因此上面你創建了三個對像並調用了3次ch3.joinGame();你的tatol就是自加3次,所以它最終的結果是3

另外,動態變量與靜態變量的區別:

動態變量在子程序中,每次調用都會從它的初始值開始調用,而不管他在函數中經歷了什么變化;靜態變量會從變化后的值繼續改變。


免責聲明!

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



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