2017-09-01 57 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

相关问题