有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中静态变量的使用

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

在下面给出的代码中,我试图做的是:我在类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+"");
    }
}

共 (4) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    您遇到的问题是,您正在运行两个不同的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程序方面仍然有很多错误。做你的研究

  3. # 3 楼答案

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

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

  4. # 4 楼答案

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