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.存活時間不同 成員變數...