Java中成員變數和區域性變數的區別

2021-09-17 04:25:43 字數 1177 閱讀 1495

a、在類中位置不同

成員變數:在類中方法外。

區域性變數:在方法定義中或方法宣告上。

b、在記憶體中位置不同 

成員變數:在堆記憶體                

成員變數:在棧記憶體

c、生命週期不同

成員變數:隨著物件建立而存在,隨著物件消失而消失

區域性變數:隨著方法的呼叫而存在,隨著方法呼叫完畢而消失

d、初始化值不同

成員變數:有預設初始化值

區域性變數:沒有預設初始化值,必須定義,賦值,然後才能使用。

attention:區域性變數名稱可以與成員變數名稱一樣,但在方法呼叫時採用就近原則

例如:當區域性變數沒有預設值時

public class jvbuandquanjv 

}class variable

}

報錯資訊為:

意思為:區域性變數num2可能沒有初始化

attention示例:

public class jvbuandquanjv 

}class variable

}

輸出結果為:

public class jvbuandquanjv 

}class variable

}

輸出結果為:

成員變數在堆記憶體中、區域性變數存在佔記憶體中的含義為:

當物件new出來,實體存在於堆,物件的成員變數已經在堆上分配空間,但物件裡面的方法是沒有出現的,只出現方法的宣告,方法裡面的區域性變數並沒有建立。等到物件呼叫此方法時,為了加快執行的速度,方法中的區域性變數才會在棧中建立,所以,方法中的區域性變數是在棧內的。

當然需要注意的是類變數(靜態變數)存在於方法區!!引用型別的區域性變數宣告在棧,儲存在堆

記憶體:棧 1.存放區域性變數 2.不可以被多個執行緒共享 3.空間連續,速度快

堆 1.存放物件 2.可以被多個執行緒共享 3.空間不連續,速度慢,但是靈活 

方法區 1.存放類的資訊:**、靜態變數、字串常量等等 2.可以被多個執行緒共享 3.空間不連續,速度慢,但是靈活

總的來說:我們先來記住兩條**法則:

1.引用型別總是被分配到「堆」上。不論是成員變數還是區域性

2.基礎型別總是分配到它宣告的地方:成員變數在堆記憶體裡,區域性變數在棧記憶體中

Java 成員變數和區域性變數

成員變數 在類範圍裡定義的變數。成員變數又分為例項屬性 不用static 修飾 和類屬性 用static 修飾 類屬性和例項屬性統稱為成員變數。類屬性在類的準備階段開始存在,直到系統銷毀這個類,類屬性與類的生存範圍相同。例項屬性從類的例項被建立開始存在,直到系統銷毀這個例項,例項屬性與對應例項生存範...

java的成員變數和區域性變數!

首先說下變數 1 成員變數 變數定義部分所定義的變數被稱為類的成員變數。也就是說成員變數在整個類中都有效,類中的方法可以直接呼叫成員變數使用。然而成員變數又分為例項成員變數 簡稱例項變數 和類變數 簡稱靜態變數 1.1 例項變數 就是我們正常定義的變數,比如int a a就是例項變數 1.2 靜態變...

成員變數和區域性變數

定義類其實就是在定義類中的成員 成員 成員變數 屬性,成員函式 行為 成員變數和區域性變數的區別 1.成員變數定義在類中,整個類中都可以訪問 區域性變數定義在函式 語句 區域性 塊中,只在所屬的區域有效 2.成員變數存在於堆記憶體的物件中。區域性變數存在於棧記憶體的方法中。3.存活時間不同 成員變數...