Java成員變數與局部變數同名,java成員變數同名

來源:互聯網
上載者:User

Java成員變數與局部變數同名,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。

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.