我有一个静态变量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。
如何在另一个类中使用此变量值?
这是一个简单的程序,用于演示我所面临的问题。
答案 0 :(得分:0)
如果从其他类调用getCpu()方法,则不会调用类abc的main方法。
如果需要在main方法中更新count变量,请在静态块中定义实现,如下所示。
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;
}
}
答案 1 :(得分:0)
如果这是在多线程环境中,则可能在初始化totalContainer之前调用getCpu()。它看起来好像是一种竞赛条件。
如果您保证在main方法完成后调用getCpu(),则该值将是正确的。
测试一下,试试这段代码:
System.out.println(totalContainer);
SwingUtilities.invokeLater(() -> getCpu());
您使用多线程后可以执行的操作: