2017-09-01 61 views
-2

我有一個靜態變量totalcontainer,我在main方法分配值給它。 現在,當我把它在另一種方法中它給缺省值即0通過靜態變量的值給另一個函數

變量的值未在第二方法更新。

import java.util.ArrayList; 

public class abc { 
    static int totalContainer; 
    static ArrayList<Integer> count = new ArrayList<Integer>(); 

    public static void main(String args[]) { 
     count.add(2); 
     count.add(10); 
     count.add(15); 
     count.add(6); 
     count.add(8); 
     totalContainer = count.size(); 
     System.out.println(totalContainer); 
    } 

    public static float getCpu() { 
     int getcontainer = totalContainer; 
     System.out.println("in get cpu  " + getcontainer); 
     return getcontainer; 
    } 
} 

我打電話方法getCpu從另一個類,並始終得到值爲0

我怎樣才能在其他類使用這個變量的值?

這是一個簡單的程序來演示我面臨的問題。

+7

如何以及何時你叫'getCpu()'? 'abc'真的是你的應用程序的主要類? – Berger

+2

也許這與你從不調用getCpu()'的事實有關? –

+2

如果你從另一個類的'main'調用'getCpu()',那麼'main'可能還沒有在類'abc'中運行來設置'totalContainer'。 – khelwood

回答

0

如果getCpu()方法從某些其他類調用,類ABC的主要方法不被調用。

如果您需要更新爲主要方法的計數變量,定義如下靜態塊實現。

import java.util.ArrayList; 

public class abc { 
    static int totalContainer; 
    static ArrayList<Integer> count = new ArrayList<Integer>(); 

    static{ 
     count.add(2); 
     count.add(10); 
     count.add(15); 
     count.add(6); 
     count.add(8); 
     totalContainer = count.size(); 
    } 

    public static void main(String args[]) { 
     System.out.println(totalContainer); 
    } 

    public static float getCpu() { 
     float getcontainer = totalContainer; 
     System.out.println("in get cpu  " + getcontainer); 
     return getcontainer; 
    } 
} 
0

如果這是在多線程環境中,可能是在totalContainer初始化之前調用getCpu()。看起來好像它是一種競速狀態。

如果保證getCpu()的主要方法完成後調用,則該值將是正確的。

測試這個,試試這個代碼:

你能因爲你正在使用多線程做:

  • 首先初始化所有你想要的,然後開始多線程
  • 或進行鎖定,以正確初始化
+0

我在我的主要方法中使用多線程。 –

+0

這就是爲什麼它沒有初始化的原因:由於線程問題超出了你的控制範圍,所以在調用它之前調用該方法。請參閱編輯的回覆 – Panayotis

相關問題