Java 中關鍵詞 this 的用法

this 在 Java 中的作用是指向對象的引用,根據 this 所在位置不同,其主要引用方式分爲兩種情形:

  • 構造器中引用構造器中初始化的對象;
  • 在方法中引用調用該方法的對象

this 最大作用就是讓類中的一個方法訪問的另一個方法或實例變量;

public class DogText {
	//定義一個 jump 方法
	public  void jump()
	{
		System.out.println("正在執行 jump 方法!");
	}
	public void run()
	{
		//調用 jump 方法,構造器初始化;
		DogText d = new DogText();
		d.jump();
		System.out.println("正在執行 Run 方法");
	}
	
	public static void main(String[] args)
	{
		DogText d = new DogText();
		d.run();
	}

}

在上面例子中,在 run() 方法中方調用類中的 jump() 方法,這裏用的是創建 DogText 對象來調用該方法,但是在主函數 main() 函數中,又創建了一次 DogText 對象引用;

以上的調用方式可以正常運行,但這樣代碼運行方式是:1,第一個方法 run() 內調用其他方法(例如 jump() 方法)必須需要創建一個 DogText() 對象麼?2,是否必要重新創建一個 DogText() 對象?

對於第一個問題是肯定的,調用一個非 static 修飾的方法必須用對象,所以需要創建一個新的對象,2,不一定,因爲在主函數 run()調用時已經創建好了一個 對象,繼續使用時可直接調用就 OK 了。

run() 方法調用 jump() 方法,可直接可以利用在 run() 獲得該方法的對象,用關鍵詞 this 即可滿足

public void run()
	{
		//this 引用調用 run()的對象
		this.jump();
		System.out.println("正在執行 Run 方法");
	}

而在 java 中是允許 類中一個方法直接調用另一個方法,可以省略 this 前綴,因此 run() 方法可以改寫爲:

public void run()
	{
		//this 引用調用 run()的對象
		this.jump();
		System.out.println("正在執行 Run 方法");
	}

大部分時候,一個方法調用另一個方法、實例變量加不加 this 效果一樣的;雖然 this 省略了,但前面調用方法的對象是依然存在的;

這裏需要注意一點的是用 static 修飾的方法 不能使用 this 關鍵字,因爲這個關鍵詞無法指向合適的對象;所以 static 修飾的方法不能使用 this 引用,只能對象調用,也就造成了 java中的一個語法規定;靜態成員不能直接訪問靜態成員

案例如下:

public class DogText {
	//定義一個 jump 方法
	public  void jump()
	{
		System.out.println("正在執行 jump 方法!");
	}
	public void run()
	{
		//調用 jump 方法,構造器初始化;
		DogText d = new DogText();
		d.jump();
		System.out.println("正在執行 Run 方法");
	}
	
	public static void main(String[] args)
	{
		//run() 程序報錯,無法從靜態上席文引用非靜態
		DogText d = new DogText();
		d.run();
	}

}

小總結

以上就是 this 關鍵詞的一些用法, 大概總結下來就兩點:

  • 1,一般情況,類中的方法可直接調用另一種方法、成員變量;this 可加可不加,引用的是對象;
  • 2,static 修飾方法不可調用非 static 修飾方法,需構造器構造一個新的對象再進行調用。

文章首發於公衆號 Java開發愛好者

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章