Java基礎筆記(七)—— 成員變量、靜態變量、局部變量
1 public class Test { 2 int c; //成員變量(實例變量) 3 static int s1; //靜態變量(類變量)(全局變量) 4 public static void main(String[] args){ 5 //static int s2; //局部變量不允許static定義 6 int b; //局部變量 7 Test t=new Test(); 8 System.out.println(t.c); //成員變量系統會提供默認初始值,隨著對象創建而存在(實例變量)9 10 b=1; 11 System.out.println(b); //局部變量使用前必須得賦值,系統不會默認初始化 12 13 // 靜態變量隨著類的加載而存在,所有對象共享 14 System.out.println(t.s1); 15 Test t1=new Test(); 16 t1.s1=2; //其中一個對象將其值改變,即共享數據改變了。 17 System.out.println(t1.s1); 18 System.out.println(s1);19 System.out.println(Test.s1); 20 } 21 }
(1)作用域
成員變量:有4種修飾符決定成員變量的可見性。如表1所示。
局部變量:它所在的花括號內。
靜態變量:同成員變量。
public:表明該成員變量或方法對所有類或對象都是可見的,所有類或對象都可以直接訪問。
private:表明該成員變量或方法是私有的,只有當前類對其具有訪問權限,除此之外的其它類或對象都沒有訪問權限。
protected:表明成員變量或方法對該類自身、與它在同一個包中的其它類、在其它包中的該類的子類都可見。
default:表明該成員變量或方法只有自己和與其位於同一包內的類可見。若父類與子類位於同一個包內,則子類對父類的default成員變量或方法都有訪問權限;若父類與子類位於不同的package內,則沒有訪問權限。
這些修飾符只能修飾成員變量,不能用來修飾局部變量。private與protected不能用來修飾類(只有public、abstract、final 能用來修飾類)。
(2)存儲位置
成員變量:存儲在堆內存中。
局部變量:存儲在棧內存中。
靜態變量:存儲在方法區中。
(3)初始值
成員變量:有默認初始值。
局部變量:沒有默認初始值,使用前必須賦值。
靜態變量:有默認初始值。
(4)調用方式
成員變量:對象.實例變量
靜態變量:類.靜態變量 或者 對象.靜態變量
局部變量:直接用。
(5)生命周期
成員變量:與類的實例化對象作用範圍相同,當類被實例化時,成員變量就會在內存中分配空間並初始化,直到這個被實例化對象的生命周期結束,成員變量的生命周期才結束。
靜態變量:只要類被加載,JVM就會給類的靜態變量分配存儲空間。
局部變量:在方法被調用,或者語句被執行的時候存在,當方法調用完,或者語句結束後,就自動釋放。
(6)與對象的相關性
靜態變量不依賴於特定的實例,是所有對象共享的數據。靜態變量屬於類,在內存中只有一個復制(所有實例都指向同一個內存地址),只要靜態變量所在的類被加載,這個靜態變量就會被分配空間,即可被使用了。
成員變量是每個對象所特有的數據。成員變量屬於對象,只有對象被創建後,成員變量才會被分配空間,才能被使用,它在內存中存在多個復制。
Java基礎筆記(七)—— 成員變量、靜態變量、局部變量