java面向对象(this关键字)
一.this的作用
1.this 相當于是指向當前對象本身
2.成員變量和局部變量同名問題
class Person {private int age;private String name;// 給姓名和年齡初始化的構造方法Person(String name, int age) {// 當需要訪問成員變量是,只需要在成員變量前面加上this.即可this.name = name;this.age = age;}public void speak() {System.out.println("name=" + this.name + ",age=" + this.age);} }class PersonDemo {public static void main(String[] args) {Person p = new Person("張三", 23);p.speak();} }3.調用構造函數
class Person {// Person的成員屬性private int age;private String name;// 無參數的構造方法 Person() {}// 給姓名初始化的構造方法 Person(String nm) {name = nm;}// 給姓名和年齡初始化的構造方法Person(String nm, int a) {// 由于已經存在給姓名進行初始化的構造方法 name = nm;因此只需要調用即可// 調用其他構造方法,需要通過this關鍵字來調用this(nm);// 給年齡初始化age = a;} }?
二.this原理圖解
class Person {private int age;private String name;Person() {}Person(String nm) {name = nm;}Person(String nm, int a) {this(nm);age = a;} }class PersonDemo {public static void main(String[] args) {Person p = new Person("張三", 23);} }圖例說明:
1、先執行main方法,main方法壓棧,執行其中的new Person(“張三”,23);
2、堆內存中開辟空間,并為其分配內存地址0x33,,緊接著成員變量默認初始化(name=null ?age = 0);
3、擁有兩個參數的構造方法(Person(String nm , int a))壓棧,在這個構造方法中有一個隱式的this,因為構造方法是給對象初始化的,那個對象調用到這個構造方法,this就指向堆中的那個對象。
4、由于Person(String nm , int a)構造方法中使用了this(nm);構造方法Person(String nm)就會壓棧,并將“張三”傳遞給nm。在Person(String nm , int a)構造方法中同樣也有隱式的this,this的值同樣也為0x33,這時會執行其中name = nm,即把“張三”賦值給成員的name。當賦值結束后Person(String nm , int a)構造方法彈棧。
5、程序繼續執行構造方法(Person(String nm , int a)中的age = a;這時會將23賦值給成員屬性age。賦值結束構造方法(Person(String nm , int a)彈棧。
6、當構造方法(Person(String nm , int a)彈棧結束后,Person對象在內存中創建完成,并將0x33賦值給main方法中的p引用變量。
注意:
this代表的是對象,哪個對象調用了this所在的方法,this就代表哪個對象。
調用其他構造方法的語句必須定義在構造方法的第一行,原因是初始化動作要最先執行。
三.this應用實例(判斷是否是同齡人)
class Person {private int age;private String name;// 給姓名和年齡初始化的構造方法Person(String name, int age) {// 當需要訪問成員變量是,只需要在成員變量前面加上this.即可this.name = name;this.age = age;}public void speak() {System.out.println("name=" + this.name + ",age=" + this.age);}// 判斷是否為同齡人public boolean equalsAge(Person p) {// 使用當前調用該equalsAge方法對象的age和傳遞進來p的age進行比較// 由于無法確定具體是哪一個對象調用equalsAge方法,這里就可以使用this來代替/** if(this.age == p.age) { return true; } return false;*/return this.age = p.age;} }轉載于:https://www.cnblogs.com/akiyama/p/10222474.html
總結
以上是生活随笔為你收集整理的java面向对象(this关键字)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Sonos 推出 Era 100 音箱:
- 下一篇: DS树+图综合练习--构建邻接表
