this用在類別內部,表示類別實例本身。
this關鍵字是類別內部當中對自己的一個引用,可以方便類別中方法存取自己的屬性。
java中this用法
#1、局部變數和成員變數重名的時候,在方法中使用this表示成員變數以示區分。
class Demo{ String str = "这是成员变量"; void fun(String str){ System.out.println(str); System.out.println(this.str); this.str = str; System.out.println(this.str); } } public class This{ public static void main(String args[]){ Demo demo = new Demo(); demo.fun("这是局部变量"); } }
分析:上面的類別Demo中有一個成員變數str和一個局部變數str(類別方法中的形式參數),很顯然局部變數和成員變數重名,這個時候一般在方法中直接使用str實際上是使用局部變數str,對成員變數str沒有任何影響,此時如果需要對成員變數做點什麼,就必須使用this關鍵字。
有個問題,如果方法中沒有str,那麼在方法中使用成員變數str會是什麼情況呢?實際上是方法內的所有操作都是針對成員變數str的。 java程式設計思想的84頁中間有這樣一句話:如果在方法內部呼叫同一個類別的另一個方法,就不必使用this。同樣,在一個方法中如果沒有局部變數和成員變數同名,那麼在這個方法中使用成員變數也不必使用this,可以執行下面的程式碼看看。
class Demo{ String str = "这是成员变量"; void fun(String str1){ System.out.println(str1); System.out.println(str); } } public class This{ public static void main(String args[]){ Demo demo = new Demo(); demo.fun("这是局部变量"); } }
2、this關鍵字把目前物件傳遞給其他方法
這裡有個很經典的例子,就是java程式設計思想的85頁的例子。我們拿出來仔細研究。
class Person{ public void eat(Apple apple){ Apple peeled = apple.getPeeled(); System.out.println("Yummy"); } } class Peeler{ static Apple peel(Apple apple){ //....remove peel return apple; } } class Apple{ Apple getPeeled(){ return Peeler.peel(this); } } public class This{ public static void main(String args[]){ new Person().eat(new Apple()); } }
這是我自己的認識,也許不正確,看看書中是怎麼說的:Apple需要呼叫Peeler.peel()方法,他是一個外部的工具方法,將執行由於某種原因而必須放在Apple外部的操作(也許是因為該外部方法要應用於許多不同的類,而你卻不想重複這些程式碼)。為了將其自身傳遞給外部方法,必須使用this關鍵字。
分析:設想一個場景,假如各種水果去皮的工作都是一樣的,只要給我水果,我都用同樣的方法去皮。那麼結合上面的例子,傳進來一個水果,我們吃之前getPeeled(),必須將此水果作為參數傳遞給外部的peel(),用this來代表自身傳遞給外部方法。
3、當需要傳回目前物件的參考時,就常常在方法寫return this;
這種做法的好處是:當你使用一個物件調用該方法,此方法返回的是經過修改後的對象,且又能使用該對像做其他的操作。因此很容易對一個物件進行多次操作。
public class This{ int i = 0; This increment(){ i += 2; return this; } void print(){ System.out.println("i = " + i); } public static void main(String args[]){ This x = new This(); x.increment().increment().print(); } }
結果為:
4
4、在建構器中呼叫建構器需要使用this
一個類別有許多建構函數,有時想在一個建構函數中呼叫其他建構函數,以避免程式碼重複,可以使用this關鍵字。在java程式設計思想中有這樣一段話:通常寫this的時候,都是指“這個物件”或“當前物件”,而且它本身表示對目前物件的引用。在建構器中,如果為this添加了參數列表,那麼就有不同的意義。這將產生對符合此參數清單的某個建構器的明確呼叫;這樣呼叫其他建構函式就有了直接的途徑。
仔細分析:
從主函數開始,new Flower()會在記憶體分配空間,初始化對象,初始化物件是呼叫建構函數,這裡沒有寫任何參數,當然是呼叫預設建構函數,就是那個無參的構函數。
這個無參的建構函數的第一行程式碼就是this("hi",122);這裡的意思是該無參構造函數又去呼叫帶兩個參數的建構函數,來到帶兩個參數的建構函數,第一行程式碼是this(s);這行程式碼自動匹配帶一個參數的建構函數,發現Flower(String ss)這個比較匹配,都是String類型的參數。
接著呼叫了有一個String型別參數的建構函數,印出:只有String型別的參數的建構子 s = hi
;然後回到上一層呼叫函數,就是帶有兩個參數的建構函數,列印輸出:有String和int型別的參數的建構子
;再回到上一級,就是無參建構函數,印出:預設建構子
。
此時建構函數已經初始化完成新建的對象,最後在主函數的最後一行程式碼中列印:petalCount=122 s=hi
。
畫個圖看得更明白。
有幾點要注意:
1,this只可以呼叫一個建構器,在一個建構器中不能同時呼叫兩個構造器;
2,必須將你所呼叫的構造器放在最開始的位置,這也解釋了為什麼不能在一個構造函數中呼叫兩個構造器,那麼第二個勢必不在最開始位置。
3,本例中在有兩個參數的建構函式中可以用this呼叫其他任一個只有一個參數的建構函數,這取決你自己,隨便調哪一個都可以。
4,在建構函式以外的方法內不能使用this呼叫建構函式。程式碼裡面註解的都不能正確編譯。
this總結
1、表示對目前物件的參考!
2、表示用類別的成員變量,而非函數參數。
3、用於在建構方法中引用滿足指定參數類型的建構器(其實也就是建構方法)。但是這裡必須非常注意:只能引用一個建構方法且必須位於開始!
4、很明顯this不能用在static方法中,因為this指涉當前對象,而static則無對象之說。
php中文網,大量的免費Java入門教學,歡迎線上學習!
以上是java中this是什麼意思?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver CS6
視覺化網頁開發工具