将静态变量值传递给另一个函数

时间:2017-09-01 10:07:39

标签: java

我有一个静态变量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。

如何在另一个类中使用此变量值?

这是一个简单的程序,用于演示我所面临的问题。

2 个答案:

答案 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());

您使用多线程后可以执行的操作:

  • 首先初始化您想要的所有内容,然后启动多线程
  • 或执行锁定,以正确初始化