iT邦幫忙

0

[Java] 靜態變數(static variable)分析

閱讀時間: 5分鐘

(1) 靜態變數是屬於class,但不是物件(Object)。
所以要使用靜態變數時,在static method內可以不需要創建任何物件(Object)就可以使用。

例子1:

public class StaticTest {
    static int a = 1;
    int b = 2;
    
    public static void main(String[] args) {
        System.out.println("static variable a= " + StaticTest.a);
        StaticTest obj = new StaticTest(); //創建一個class物件(Object)
        System.out.println("instance variable b= " + obj.b);
    }
}

如果要在static method內調用非靜態變數,就必須創建一個class物件(Object),然後透過物件來調用非靜態變數。

(2) 靜態變數與非靜態變數的差別在於它們對記憶體分配,每個靜態變數只有佔用一個記憶體,
假如你有不同物件都使用同一個靜態變數,它們將會只得到同一個值,而其中一個物件修改靜態變數的值,也會影響到其他物件的靜態變數的值。

例子2:

public class StaticTest2 {
    static int a;
    int b;
    
    public static void main(String[] args) {
        StaticTest2 obj1 = new StaticTest2();
        obj1.a = 100;
        obj1.b = 101;
        System.out.println("obj1.a=" + obj1.a + ", obj1.b=" + obj1.b);
        
        StaticTest2 obj2 = new StaticTest2();
        System.out.println("obj2.a=" + obj2.a + ", obj2.b=" + obj2.b);
    }
}

靜態變數a的值,通過 obj1或者obj2都只會指向同一個記憶體,換句話說,通過 obj1修改靜態變數a會影響到obj2.a的值。
通過 obj2修改靜態變數a會影響到obj1.a的值。

例項變數(instance variable) b,通過 obj1或者obj2都不會指向同一個記憶體,因為它是依賴物件而創建新的記憶體,所以obj1.b和obj2.b不是同一樣東西,它們是分別獨立存在。
通過 obj1修改靜態變數b,是不會影響到obj2.b的值。
通過 obj2修改靜態變數b,也不會影響到obj1.b的值。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言