1. 程式人生 > >JAVA_SE基礎——26.[深入解析]區域性變數與成員變數的區別

JAVA_SE基礎——26.[深入解析]區域性變數與成員變數的區別

定義的位置上區別:

1. 成員變數是定義在方法之外,類之內的。 2. 區域性變數是定義在方法之內。 作用上的區別: 1. 成員變數的作用是用於描述一類事物的公共 屬性的。 2. 區域性變數的作用就是提供一個變數給方法內部使用而已。 生命週期區別: 1. 隨著物件 的建立而存在,隨著物件的消失而消失。 2. 區域性變數在呼叫了對應的方法時執行到了建立該變數的語句時存在,區域性變數一旦出了自己的作用域 那麼馬上從記憶體中消失。 初始值的區別: 1. 成員變數是有預設的初始值。 資料型別     預設的初始值 int                0 float              0.0f double              0.0 boolean            false char                 ' ' String(引用資料型別) null  

2. 區域性變數是沒有預設的初始值的,必須要先初始化才能使用。

下面來看個例子:

//人類
class Person {
	
	String name; //成員變數

	public void eat(){
		int age ;

		age = 12;
		for(int i =  0 ; i< 5 ; i++){
			System.out.println("hello world"+ age);
		}
	}

}



class Demo3 
{
	public static void main(String[] args) 
	{
		Person p1 =  new Person();
		p1.eat();

	}
}

結果: hello world12 hello world12 hello world12 hello world12 hello world12

下面是記憶體中程式碼的執行圖

首先記憶體總體分為了五個部分,包括 stack segment(棧記憶體)、heap segmentheap segment(堆記憶體)、code segment(方法區)、data segment(靜態程式碼塊)、執行時常量池(Runtime Constant Pool)是方法區的一部分。     其中我們程式中用關鍵字new出來的東西都是存放在heap segment(堆記憶體)。     程式中的區域性變數存放在stack segment(棧記憶體),這些區域性變數是在具體方法執行結束之後,系統自動釋放記憶體資源(而heap segment中的資源需要java垃圾回收機制來處理)。     程式中的方法,是記憶體中的code segment(方法區)中的,而且是多個物件 共享一個程式碼空間區域。     static靜態變數,需要放在記憶體中的data segment(靜態程式碼塊)中。

執行時常量池,儲存常量。

關於記憶體機制 ,等我弄懂些再發表文章。都怪我太菜哭