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