2016-06-22 32 views
-2

考慮這個類:變量值

public class Save extends Application { 

    public int num1; 
    public int count; 

    public Save(int n1){ 
     num1=n1; 
     count=1; 
    } 

    public int getcount() 
    { 
     return (count); 
    } 

} 

在我主我這樣做:

new Save(15); 
Integer result = new Save().getcount(); 

現在的result值應爲1,而是result是0

+0

絕對是一個新手錯誤。但不要擔心你會修復它,你會愛上它。雖然我很確定這是重複的。 –

回答

1

我不完全相信你怎麼連得到這個編譯,因爲它會報告你沒有正確的參數量傳遞給構造函數,但爲什麼(假設)出現這種情況,說明如下:

考慮您的代碼行:

Integer result = new Save().getcount(); 

既然你從未從不放棄任何價值count在傳遞一個參數,它的默認值是0,因爲字段有默認值和整數這是0。另請注意,行:

new Save(15); 

不執行任何操作。它創建一個新的Save對象,然後立即將其標記爲垃圾收集,因爲沒有對它的引用。你可能想傳遞一個參數的構造函數,像這樣:

Integer result = new Save(SOME_NUMBER).getcount(); //result is 1 

這將正確地調用構造函數和初始化count爲1

基於您的代碼,我想你想count成爲靜態只要你想計算實例的數量類有:

public static int count; 

... 

public static int getCount() { //Follow Java conventions - use camelCase 
    return count; 
} 

... 

//In main 
new Save(15); 
Integer x = Save.getCount(); //1 instance 
1

在第2行中,您正在初始化Save的新實例,而不是使用之前在第1行中初始化的實例。

您可以參考前一個像這樣:

... 
Save mySave = new Save(15); 
Integer result = mySave.getcount(); 
0

因此,這是你的問題

new Save(15); 
Integer result = new Save().getcount(); 

應該

Save save = new Save(15); 
Integer result = save.getcount(); 

或者

Integer result = (new Save(15)).getcount(); 

你讓一個新的保存,當你得到它具有計數初始化爲0。您應該保持的一個實例算你救不過。

+1

只是一個tipe:考慮解釋爲什麼答案是這樣:) – Li357

0

你給出的代碼不會被編譯。因爲Save類定義了一個構造函數,並且只有一個參數。這將刪除默認的構造函數。所以new Save()行會有編譯錯誤。我的猜測是,您正在尋找或者統計創建Save對象的次數(在這種情況下,應該完成count ++),或者您正在嘗試檢查Save對象是否至少創建一次(使用整數1,布爾值爲true) 在這種情況下,count字段和getCount()方法應聲明爲靜態。並使用Save.getCount()調用該方法。


我已經加入計數的對象保存在該java online compiler ide - codiva創建次數的工作代碼。 PS:如果我對你想要的東西的理解不正確,請澄清你想要達到的目標的問題。還可以通過在代碼片段中包含代碼片段來簡化幫助,例如http://ideone.comhttps://www.codiva.io

+0

我正在尋找商店數據在類中,並檢查保存對象是否至少創建一次。所以你的猜測是正確的,謝謝你的解釋和代碼! – GMX