javaSE中this關鍵字
阿新 • • 發佈:2018-11-19
文章目錄
主要有以下三個方面的用途:
1.this呼叫本類屬性
2.this呼叫本類方法
3.this表示當前物件
接下來我們一一詳解:
this呼叫本類屬性
其實在前面的部落格中有用到,但是沒有詳細解釋
我們看程式碼吧:
class Person{
private String name;
private int age;
public Person(String name,int age){
name = name ;
age = age ;
}
public String getPersonInfo(){
return "姓名:" + name + ",年齡:"+age;
}
}
public class Test{
public static void main(String[] args) {
Person per = new Person("張三",20);
System.out.println(per.getPersonInfo());
}
}
在上面的構造方法中如下:
public Person(String name,int age){
name = name ;
age = age ;
}
可以看到方法裡面name=name;age=age;name這些名字都一樣,到底哪個代表哪個?編譯系統能否識別呢?我們看看結果就知道了:
可見並不是我們想要的結果,我們想要的結果是姓名為張三,年齡是20
這時候我們就需要用this來呼叫屬性了,將構造方法改成如下方式:
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
再來看看結果是不是我們想要的:
所以以後只要在類中的方法中使用類中屬性,一定記得加this。
this呼叫本類方法
this呼叫本類方法有兩種情況:
1.呼叫普通方法 。this.方法名(引數)
2.呼叫構造方法。 this(引數)
this呼叫普通方法
比如說我們在上面的程式碼中改一下:
public Person(String name,int age){
this.name = name ;
this.age = age ;
this.print();//呼叫普通方法
}
public void print(){
System.out.println("*****************");
}
我們可以看到this.print()就呼叫了普通方法,我們再看看執行結果:
呼叫成功!
這就是this呼叫本類方法,其實呼叫本類方法不加this也可以,但是最好加上,因為在後面的繼承中有很大的作用,能更好的區分。
this呼叫構造方法
在上篇部落格中我詳細介紹了構造方法的過載,我們先把程式碼搬過來看一下:
public Person(String name){//構造方法
this.name=name;
}
public Person(String name,int age){//過載構造方法
this.name = name ;
this.age = age ;
}
那麼呼叫構造方法就可以把程式碼修改如下:
public Person(String name){//構造方法
this.name=name;
}
public Person(String name,int age){//過載構造方法
this(name);//呼叫構造方法
this.age = age ;
}
使用this呼叫構造方法時要注意:
1.this呼叫構造方法語句必須放在構造方法首行。
2.this呼叫構造方法必須留有出口
this表示當前物件
還是看一段程式碼吧:
class Person{
public void print(){
System.out.println("[PRINT]方法:"+this);//this表示當前物件
}
}
public class Test{
public static void main(String[] args) {
Person p1 = new Person();
System.out.println("[MAIN]方法:"+p1);
p1.print();
System.out.println("=================");
Person p2 = new Person();
System.out.println("[MAIN]方法:"+p2);
p2.print();
}
}
我們在呼叫print()前後各列印一次結果:
只要物件呼叫了本類中的方法,這個this就表示當前執行的物件