在Java中使用静态变量

时间:2012-05-21 17:39:22

标签: java

我知道静态变量只在一次加载而不是每个对象时创建和初始化。

在下面给出的代码中,我要做的是:我在类A中将一个int变量“a”声明为静态,并为其赋值为5.执行main时,我将其值更改为6并制作程序无限循环。所以目前“a”值是6.

现在我试图做的是当A类仍在循环时我试图从其他类B访问这个变量,我期望在运行B类时应该打印6(因为当我运行B类时“一个“价值变为6”但令人惊讶的是它仍然给了我5.

为什么即使我将“a”声明为静态也会发生这种情况?无法弄清楚这种方法有什么问题。

class A{
    static int a=5;

    public static void main(String args[]){
        System.out.println(A.a+"");
        a=6;
        while(true){
        }
    }
}

class B{    
    public static void main(String args[]){
        System.out.println(A.a+"");
    }
}

4 个答案:

答案 0 :(得分:4)

您遇到的问题是您正在运行两个不同的JVM进程。你应该做的是在自己的线程中运行每个“main”方法。这样他们共享(因此可以修改)相同的内存。以下是修改为使用线程的示例:

public class Main{
    public static int v = 5;

    public static void main(String[] args) throws Exception{
        new Thread(new A()).start();
        Thread.sleep(5000);
        new Thread(new B()).start();
    }
}

class A implements Runnable{
    public void run(){
        System.out.println(Main.v);
        Main.v = 6;
    }
}

class B implements Runnable{
    public void run(){
        System.out.println(Main.v);
    }
}

旁注:虽然这个示例确实展示了问题的预期,但在编写使用多个线程的正确 Java程序方面仍然存在许多问题。做你的研究。

答案 1 :(得分:0)

你永远不会在A中运行主循环。

只需创建一个方法来更改值。

答案 2 :(得分:0)

这是因为从不调用A的主要方法。

答案 3 :(得分:0)

您正在运行两个java进程和两个程序。第二个类加载器加载class A并将其静态变量设置为5,但class B中没有调用来调用class A中定义的静态main()方法,将其增加到6。