JAVA_SE基礎——26.[深刻解析]局部變量與成員變量的區別

黑馬程序員入學blog ...
html


若是這章節很難懂的話應該返回去先看  JAVA_SE基礎——10.變量的做用域java

定義的位置上區別:
1. 成員變量是定義在方法以外,類以內的。
2. 局部變量是定義在方法以內。

做用上的區別:
1. 成員變量的做用是用於描述一類事物的公共 屬性的。
2. 局部變量的做用就是提供一個變量給方法內部使用而已。

生命週期區別:
1. 隨着對象 的建立而存在,隨着對象的消失而消失。
2. 局部變量在調用了對應的方法時執行到了建立該變量的語句時存在,局部變量一旦出了本身的做用域
那麼立刻從內存中消失。

初始值的區別:
1. 成員變量是有默認的初始值。
數據類型     默認的初始值
int                0
float              0.0f
double              0.0
boolean            false
char                 ' '
String(引用數據類型) null

2. 局部變量是沒有默認的初始值的,必需要先初始化才能使用。程序員


下面來看個例子:spa

//人類
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


下面是內存中代碼的執行圖.net




首先內存整體分爲了五個部分,包括 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(靜態代碼塊)中。
code

運行時常量池,儲存常量。
htm


關於內存機制 ,等我弄懂些再發表文章。都怪我太菜哭對象

相關文章
相關標籤/搜索