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

黑馬程序猿入學blog ...
java


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

定義的位置上差異:
1. 成員變量是定義在方法以外,類以內的。


2. 局部變量是定義在方法以內。spa



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

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



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

code

2. 局部變量是沒有默認的初始值的,必須要先初始化才幹使用。對象


如下來看個樣例:blog

//人類
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)是方法區的一部分ip




    當中咱們程序中用keywordnew出來的東西都是存放在heap segment(堆內存)。


    程序中的局部變量存放在stack segment(棧內存),這些局部變量是在詳細方法運行結束以後,系統本身主動釋放內存資源(而heap segment中的資源需要java垃圾回收機制來處理)。內存




    程序中的方法。是內存中的code segment(方法區)中的,而且是多個對象 共享一個代碼空間區域。


    static靜態變量。需要放在內存中的data segment(靜態代碼塊)中。


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



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

相關文章
相關標籤/搜索