1. 程式人生 > >javaSE中this關鍵字

javaSE中this關鍵字

文章目錄

主要有以下三個方面的用途:

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就表示當前執行的物件