java 指代对象_java-This的理解
都知道this是一個指代作用吧,但指代的是什么?
一般網(wǎng)上搜索的this 都說是“當前對象”,但這樣說和沒說區(qū)別一個樣,什么是“當前對象”都說不清楚。
但其實,this指代得分下面4種情況來說。
有的是場景展示的(如一、三),另外兩個是偏應(yīng)用的(如二、四)。一般記住這4種情況即可。
但如果再總結(jié),其實也就分成兩種情況:一和二是一種,很常見,一般具備點Java基礎(chǔ)就不難理解;三和四是一種,就是文章開頭說的指代“當前對象”的介紹說明,是本編博客介紹的重點!
一、構(gòu)造函數(shù)中用于區(qū)別同名的類的名字
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ; // 為類中的name屬性賦值
this.age = age ;// 為類中的age屬性賦值
}
public String getInfo(){ //
return "姓名:" + name + ",年齡:" + age ;
}
};
public class ThisDemo02{
public static void main(String args[]){
Person per1 = new Person("張三",33) ;
System.out.println(per1.getInfo()) ;
}
};
這種就是常見的,this指代Person類中的成員變量name或age,而不是構(gòu)造函數(shù)中的形參name或age,這個在eclipse里編寫的時候也會有顏色區(qū)分,很好理解this指代的是哪個。
上面運行結(jié)果是: 姓名:張三,年齡:33
如果不加this,運行結(jié)果是: 姓名:null,年齡:0;
二、構(gòu)造方法的相互調(diào)用用的?(偏應(yīng)用)
package methoud;
class Person{ // 定義Person類
private String name ; // 姓名
private int age ; // 年齡
public Person(){ // 無參構(gòu)造
System.out.println("新對象實例化") ;
}
public Person(String name){
this() ;// 調(diào)用本類中的無參構(gòu)造方法
this.name = name ;
}
public Person(String name,int age){ // 通過構(gòu)造方法賦值
this(name) ;// 調(diào)用有一個參數(shù)的構(gòu)造方法
this.age = age ;// 為類中的age屬性賦值
}
public String getInfo(){ // 取得信息的方法
return "姓名:" + name + ",年齡:" + age ;
}
};
public class ThisDemo06{
public static void main(String args[]){
Person per1 = new Person("張三",33) ; // 調(diào)用構(gòu)造實例化對象
System.out.println(per1.getInfo()) ; // 取得信息
}
};
運行結(jié)果:
新對象實例化
姓名:張三,年齡:33
這個和構(gòu)造方法重載差不多,根據(jù)參數(shù)個數(shù)就能看出this方法指代的是哪一個構(gòu)造函數(shù)了。
注意點:
在使用this關(guān)鍵字調(diào)用其他關(guān)鍵字的時候,有以下限制:
1)this()調(diào)用其他構(gòu)造方法的語句只能放在構(gòu)造方法(在其他普通方法里是不行的)的首行;
2)在使用this調(diào)用其他構(gòu)造方法的時候,至少有一個構(gòu)造方法是不用this調(diào)用的。(必須要有結(jié)尾,不能無限期的調(diào)用下去,循環(huán)遞歸調(diào)用);
錯誤示范:
package methoud;
class Person{
private String name ;
private int age ;
public Person(){
System.out.println("新對象實例化") ;
}
public Person(String name){
this.name = name ;
this() ;// 調(diào)用this()方法只能放在構(gòu)造方法首行
}
public Person(String name,int age){
this(name) ;// 調(diào)用有一個參數(shù)的構(gòu)造方法
this.age = age ;
}
public String getInfo(){
this() ;// 其他普通方法不能調(diào)用this()方法
return "姓名:" + name + ",年齡:" + age ;
}
};
public class ThisDemo04{
public static void main(String args[]){
Person per1 = new Person("張三",33) ;
System.out.println(per1.getInfo()) ;
}
};
三、當前對象
也就是:誰在調(diào)用這個方法,this就代表誰
下面的例子就能很好地幫助理解
class Person{
public String getInfo(){
System.out.println("Person類 --> " + this) ; // 直接打印this
return null ; // 為了保證語法正確,返回null
}
};
public class ThisDemo06{
public static void main(String args[]){
Person per1 = new Person() ;
Person per2 = new Person() ;
System.out.println("MAIN方法 --> " + per1) ;
per1.getInfo() ; // per1在調(diào)用這個方法,this指代的就是per1
System.out.println("MAIN方法 --> " + per2) ;
per2.getInfo() ; // per2在調(diào)用這個方法,this指代的就是per2
}
};
運行結(jié)果:
四、用于對象之間的比較用的(偏應(yīng)用)
class Person{ // 定義Person類
private String name ; // 姓名
private int age ; // 年齡
public Person(String name,int age){
this.setName(name) ;
this.setAge(age) ;
}
public boolean compare(Person per){
// 調(diào)用此方法時里面存在兩個對象:當前對象、傳入的對象
Person p1 = this ; // 當前的對象,就表示per1。下面per1調(diào)用了compare方法,那么this指代的就是per1
Person p2 = per ; // 傳遞進來的對象,就表示per2
if(p1==p2){
return true ;
}else{
return false;
}
}
public void setName(String name){
this.name = name ;
}
public void setAge(int age){
this.age = age ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
};
public class ThisDemo08{
public static void main(String args[]){
Person per1 = new Person("張三",30) ;
Person per2 = new Person("張三",30) ;
if(per1.compare(per2)){
System.out.println("兩個對象完全相等!就是同一個對象!") ;
}else{
System.out.println("兩個對象不相等!") ;
}
}
};
運行結(jié)果:
兩個對象不相等!
總結(jié)
以上是生活随笔為你收集整理的java 指代对象_java-This的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 此 sqltransaction 已完成
- 下一篇: 安卓能硬改的手机机型_【每日新闻】小米1