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