Java中静态变量的使用

Java中静态变量的使用,java,Java,我知道静态变量只被创建和初始化一次,即类被加载时,而不是每个对象 在下面给出的代码中,我试图做的是:我在类a中将一个int变量“a”声明为static,并将其赋值为5。当执行main时,我将其值更改为6,并使程序无限循环。因此,目前“a”值为6 现在我试图做的是,当类A仍然循环时,我试图从其他类B访问这个变量,我希望在运行类B时应该打印6(因为当我运行类B时,“A”值更改为6),但令人惊讶的是,它仍然给了我5 为什么即使我将“a”声明为静态,也会发生这种情况?无法找出此方法的错误 class A

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

在下面给出的代码中,我试图做的是:我在类a中将一个int变量“a”声明为static,并将其赋值为5。当执行main时,我将其值更改为6,并使程序无限循环。因此,目前“a”值为6

现在我试图做的是,当类A仍然循环时,我试图从其他类B访问这个变量,我希望在运行类B时应该打印6(因为当我运行类B时,“A”值更改为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+"");
    }
}

你从来没有真正运行过主循环


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

这是因为从未调用a的主方法。

您正在运行两个java进程和两个程序。第二个类加载器加载
类A
并将其静态变量设置为5,但在
类B
中没有调用调用在
类A
中定义的将其递增为6的静态main()方法。您应该做的是在自己的线程中运行每个“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程序方面仍然存在很多错误。进行搜索。

您正在通过
A.main
B.main
运行两个独立的程序。您必须在同一进程中使用线程来演示您希望看到的内容。或者更好,使用静态初始化程序块。我认为线程不是必需的。B`public static void main(String[]args){A.main(args);System.out.println(A.A+“”);}我首先运行了类A,所以“A”值应该更改为6。在这之后,当A在一个while循环中被击中时,我试图访问B类中的“A”,我得到了5作为答案?你必须在同一个类中运行这两个,才能得到你想要的。它们现在仍然是两个独立的物体,彼此之间没有任何关系。所以你只是在访问变量,在你用B.yau-r访问它之前没有真正改变它。对,我试着在不同的进程中加载这两个程序,这是错误的。非常感谢。是的,我试着在不同的进程中加载这两个程序,这是错误的。非常感谢。是的,我试着在不同的进程中加载这两个程序,这是错误的。非常感谢。