歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java成員變量與局部變量同名

看到成員變量和局部變量同名這個知識點的時候一開始有點懵逼,想了一下其實特別簡單。

先來看一個簡單的代碼。

首先我定義了一個Person類。

public class Person {
    private int age=1000;//定義成員變量,年齡為1000

    public void setAge(int age) {
        age=age;
        System.out.println("方法內的年齡"+age);
    }
    public void sayHello() {
        System.out.println("我的年齡是"+age+".");
    }
}

然後在主函數裡面創建對象並輸出。

Person p=new Person();
p.setAge(20);
p.sayHello();

輸出結果是什麼?並不是我們想象的我的年齡是20,而是下面這樣:

//方法內的年齡20
//我的年齡是1000.

想一下其實就很容易理解。

一句話,如果不同名,那麼方法內的變量名代表成員變量;如果同名,那麼方法內的變量名就只表示局部變量了,和成員變量一毛錢關系都沒有了。

所以,首先當我們創建了一個Person對象p,在創建對象的時候就已經完成了成員變量的初始化了。成員變量age的初始值是1000。

當我們p.setAge(20)的時候,其實這個20只在setAge這個方法內起作用,所以輸出了方法內年齡20,執行完這句話後,20就被銷毀了。

然後執行sayHello,它裡面的age代表的是成員變量的值,所以依舊是1000。

到這裡如果還是不能理解,可以自己寫代碼看輸出結果體會下。

那麼,當同名的時候,我們就是要讓這個變量名表示成員變量,有沒有辦法呢?

那就要說到this關鍵字了。我們把Person類改成這樣:

public class Person {
    private int age=1000;

    public void setAge(int age) {
        this.age=age;
        System.out.println("方法內的年齡"+age);
    }
    public void sayHello() {
        System.out.println("我的年齡是"+age+".");
    }
}

再運行代碼,發現代碼運行結果變成了下面這樣:

//方法內的年齡20
//我的年齡是20.

this表示的是當前對象。

this.age在這裡具體表示p對象的age(即p對象的成員變量age)的值是20。

不能理解的話就多寫寫代碼就能理解了。

Copyright © Linux教程網 All Rights Reserved