黑馬程序猿入學blog ...
java
假設這章節很是難懂的話應該返回去先看 JAVA_SE基礎——10.變量的做用域post
定義的位置上差異:
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(); } }結果:
如下是內存中代碼的運行圖生命週期
首先內存總體分爲了五個部分,包含 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(靜態代碼塊)中。
執行時常量池。儲存常量。
關於內存機制 ,等我弄懂些再發表文章。都怪我太菜