2013-08-16 65 views
-3

我認爲這可能是一個直截了當的問題,但我有一個類有一個私人靜態int變量,在類中增加,我想顯示在一個值第二課。但是,即使它已經增加,它仍然保持打印輸出0。從不同的類調用java中的私有靜態變量

相同的代碼將是

public class Test{ 

     private static int toIncrement; 

     public static int returnValue{ 
      return toIncrement; 
     } 

     public void test{ 
     for(int i = 0; i < 4; i++){ 
       toIncrement++; 
     } 
     } 
} 

所以上面的代碼運行,然後從另一個類我請Test.returnValue(); 和這個返回0

+0

@HovercraftFullOfEels這一切都在那裏。 – hexafraction

+2

@hexafraction:啊上面的代碼甚至沒有編譯。對原始海報:請不要浪費時間發佈「垃圾」代碼供我們審閱。如果您遇到嚴重問題並希望獲得認真幫助,請僅發佈* real *代碼。 –

+0

你的班級如何編譯。 – Jayamohan

回答

0

所以上面的代碼運行,然後從另一個類我請 Test.returnValue();並返回0

當你說上面的代碼運行,並不意味着你的test方法將自動執行,而不從任何地方調用。如果您先撥打test方法,然後嘗試獲取Test.returnValue(),則該值不應爲0.

0

感嘆。我從哪開始呢?

public void test{ 
    for(int i = 0; i < 4; i++){ 
     toIncrement++; 
    } 
} 

這不是一個構造函數。這將需要void刪除。由於缺乏括號,這甚至不適用。

public static int returnValue{ 
    return toIncrement; 
} 

再次括號。

private static int toIncrement; 

public static int returnValue{ 
    return toIncrement; 
} 

這是真的意味着是靜態的嗎?請將其設置爲靜態,並調用Test.test()或使其成爲非靜態並正確調用構造函數。

+0

*「即使是這樣,它將是無用的,因爲'增量'是靜態的,它會破壞。」*它不會中斷。靜態變量可以用在非靜態的上下文中(只有反過來是不真實的)。 – arshajii

+0

@arshajii謝謝,我總是很困惑2,儘管現在看起來很直觀。 – hexafraction

0

您忘記了方法中的參數括號。 應該是:

public class Test{ 

    private static int toIncrement; 

    public static int returnValue(){ 
    return toIncrement; 
    } 

    public void test(){ 
    for(int i = 0; i < 4; i++){ 
     toIncrement++; 
    } 
} 

但看到你不()任何地方調用測試中,我假設你認爲這是一個構造函數。爲了使構造刪除「作廢」 所以它只是:

public test() 
{ 
    code here 
} 

當你做到這一點,因爲你運行程序(只要這是你的主類的代碼會自動運行,如果不是你需要爲構造函數創建一個實例來運行。)

0

使用靜態塊!

public class Test{ 

     private static int toIncrement; 

     public static int returnValue(){ 
      return toIncrement; 
     } 

     static { 
     for(int i = 0; i < 4; i++){ 
       toIncrement++; 
     } 
     } 
}