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中文網其他相關文章!

JVM通過JavaNativeInterface(JNI)和Java標準庫處理操作系統API差異:1.JNI允許Java代碼調用本地代碼,直接與操作系統API交互。 2.Java標準庫提供統一API,內部映射到不同操作系統API,確保代碼跨平台運行。

modularitydoesnotdirectlyaffectJava'splatformindependence.Java'splatformindependenceismaintainedbytheJVM,butmodularityinfluencesapplicationstructureandmanagement,indirectlyimpactingplatformindependence.1)Deploymentanddistributionbecomemoreefficientwi

BytecodeinJavaistheintermediaterepresentationthatenablesplatformindependence.1)Javacodeiscompiledintobytecodestoredin.classfiles.2)TheJVMinterpretsorcompilesthisbytecodeintomachinecodeatruntime,allowingthesamebytecodetorunonanydevicewithaJVM,thusfulf

javaachievesplatformIndependencEthroughThoJavavIrtualMachine(JVM),wodecutesbytecodeonyanydenanydevicewithajvm.1)javacodeiscompiledintobytecode.2)

JavaGUI開發中的平台獨立性面臨挑戰,但可以通過使用Swing、JavaFX,統一外觀,性能優化,第三方庫和跨平台測試來應對。 JavaGUI開發依賴於AWT和Swing,Swing旨在提供跨平台一致性,但實際效果因操作系統不同而異。解決方案包括:1)使用Swing和JavaFX作為GUI工具包;2)通過UIManager.setLookAndFeel()統一外觀;3)優化性能以適應不同平台;4)使用如ApachePivot或SWT的第三方庫;5)進行跨平台測試以確保一致性。

JavadevelovermentIrelyPlatForm-DeTueTososeVeralFactors.1)JVMVariationsAffectPerformanceNandBehaviorAcroSsdifferentos.2)Nativelibrariesviajnijniiniininiinniinindrododerplatefform.3)

Java代碼在不同平台上運行時會有性能差異。 1)JVM的實現和優化策略不同,如OracleJDK和OpenJDK。 2)操作系統的特性,如內存管理和線程調度,也會影響性能。 3)可以通過選擇合適的JVM、調整JVM參數和代碼優化來提升性能。

Java'splatFormentenceHaslimitations不包括PerformanceOverhead,versionCompatibilityIsissues,挑戰WithnativelibraryIntegration,Platform-SpecificFeatures,andjvminstallation/jvminstallation/jvmintenance/jeartenance.therefactorscomplicatorscomplicatethe“ writeOnce”


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境