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+"");
}
}
# 1 楼答案
这是因为从未调用的主方法
# 2 楼答案
您遇到的问题是,您正在运行两个不同的JVM进程。您应该做的是在自己的线程中运行每个“main”方法。通过这种方式,它们共享(因此可以修改)相同的内存。下面是修改为使用线程的示例:
旁注:虽然这个例子确实说明了问题的预期,但在编写使用多线程的正确Java程序方面仍然有很多错误。做你的研究
# 3 楼答案
你从来没有真正运行过主循环
只需创建一个方法来更改值
# 4 楼答案
您正在运行两个java进程和两个程序。第二个类加载器加载
class A
并将其静态变量设置为5,但在class B
中没有调用class A
中定义的静态main()方法,该方法将其递增为6