1. 程式人生 > 其它 >Java學習筆記39——成員變數和區域性變數的區別

Java學習筆記39——成員變數和區域性變數的區別

/*

        成員變數與區域性變數的區別:
            1、在類中的位置不同
                 成員變數 類中方法外
                 區域性變數 方法內或者方法宣告上
            2、在記憶體中的位置不同
                 成員變數 堆記憶體:
                    隨著物件在堆記憶體中的建立而出現,所以成員變數是在堆記憶體中出現
                 區域性變數 棧記憶體:
                    由於方法執行是在棧中執行,所以在方法中定義的區域性變數
                    也就是存在與棧裡。
            3、生命週期不同
                成員變數 隨著物件的建立而存在,隨著物件的消失而消失
                區域性變數 隨著方法的呼叫而存在,隨著方法的呼叫完畢而消失
            4、初始化值不同
                成員變數 有預設的初始化值
                    原因:由於成員變數隨著物件的建立而存在,而物件的建立
                        是在堆記憶體中建立,而我們又知道堆記憶體中的變數建立的時候
                        系統會給予預設值,所以我們在程式碼中定義的時候可以不賦值。
                區域性變數 沒有預設的初始化值,必須先定義,賦值,才能使用。
                    原因:由於區域性變數隨著方法的呼叫而存在,是在棧裡面呼叫的。
                        而我們知道棧裡面的變數系統不會給予預設值,所以我們在程式碼
                        中定義的時候必須要賦值。

           問題:
                1、成員變數的名稱可以和區域性變數的名稱一樣嗎?
                    可以,呼叫的時候,訪問的變數遵循就近原則。

                2、方法與方法之間的區域性變數可以互相訪問嗎?
                    不可以,因為作用域的範圍不同。





 */
class VariableDemo {
    //直接在類中定義的叫成員變數
    int a;

    public static void main(String[] args) {
        //在方法裡面定義的叫區域性變數
        int a = 20;
        System.out.println(a);
    }

    public void function1(){
        int x = 20;
    }

    public void function2(){
        int y = 30;
//        System.out.println(x);
    }

}