成員變量與局部變量的區別
1、在類中的位置不同
成員變量:在類中方法外面
局部變量:在方法或者代碼塊中,或者方法的聲明上(即在參數列表中)
2、在內存中的位置不同,可以看看Java程序內存的簡單分析 見 http://www.linuxidc.com/Linux/2016-10/135687.htm
成員變量:在堆中(方法區中的靜態區)
局部變量:在棧中
3、生命周期不同
成員變量:隨著對象的創建而存在,隨著對象的消失而消失
局部變量:隨著方法的調用或者代碼塊的執行而存在,隨著方法的調用完畢或者代碼塊的執行完畢而消失
4、初始值
成員變量:有默認初始值
局部變量:沒有默認初始值,使用之前需要賦值,否則編譯器會報錯(The local variable xxx may not have been initialized)
1 package demo; 2 3 public class VariableDemo { 4 String name = "成員變量"; 5 6 public static void main(String[] args) { 7 new VariableDemo().show(); 8 } 9 10 public void show() { 11 String name = "局部變量"; 12 System.out.println(name); 13 } 14 }
輸出結果:局部變量
我們看到輸出的是show方法中定義的name變量,在使用變量時遵循的原則是就近原則,那麼如何訪問到成員變量name呢,Java中提供了this(表示調用對象本身)這個關鍵字用於訪問成員變量。
1 package demo; 2 3 public class VariableDemo { 4 String name = "成員變量"; 5 6 public static void main(String[] args) { 7 new VariableDemo().show(); 8 } 9 10 public void show() { 11 String name = "局部變量"; 12 System.out.println(this.name); 13 } 14 }
輸出結果:成員變量