簡體   English   中英

Java中靜態變量的用法

[英]Usage of static variables in Java

我知道靜態變量僅在一次加載時創建和初始化,即在類加載時而不是對每個對象初始化。

在下面給出的代碼中,我想要做的是:我在類A中將一個int變量“ a”聲明為靜態,並為其分配了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+"");
    }
}

您遇到的問題是您正在運行兩個不同的JVM進程。 您應該做的是在自己的線程中運行每個“主”方法。 這樣,他們共享(因此可以修改)相同的內存。 這是修改為使用線程的示例:

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中運行主循環。

只需提出一種更改值的方法即可。

這是因為從未調用過A的main方法。

您正在運行兩個Java進程和兩個程序。 第二個類加載器加載class A並將其靜態變量設置為5,但在class B沒有調用可調用在class A中定義的class A其遞增為6的靜態main()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM