1. 程式人生 > >Java基礎筆記(七)—— 成員變量、靜態變量、局部變量

Java基礎筆記(七)—— 成員變量、靜態變量、局部變量

system 分配 println 隨著 空間 不依賴 protect 加載 font

 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基礎筆記(七)—— 成員變量、靜態變量、局部變量