在Java程序設計中經常會見到this的使用,this使得程序設計變得規范、簡單、靈活。但是在使用過程中,在不同場合它的含義并不完全相同,使用不當還會出現錯誤。中培偉業《JAVA高級開發技術實戰》培訓專家龔老師在這里對this的幾種用法和出現的問題進行了分析詳解。
龔老師指出,Java語言中,當創建一個對象后,Java虛擬機就會為其分配一個指向對象本身的指針,這個指針就是“this”。關鍵字this與對象密切相 關,在Java程序設計中經常會見到this的使用,我們很多人很難理解它,因為它的語法較為靈活,那this到底有哪些用處呢?什么情況下使用它呢?本文就具體來分析一下this的使用方法。
一、使用this調用本類中的成員變量(屬性)
通過name=name并沒有正確的將內容賦給屬性,為什么呢?因為此時操作的name實際上是方法中的,跟類中的屬性完全不沾邊。
另外,這個程序代碼中,有一個成員變量name,同時在方法中有個形式參數,參數名也是name。然后在方法中將形式參數name的值傳遞給成員變量name。雖然我們可以看明白這個代碼的含義,但是作 為Java編譯器它是怎么判斷使用哪個變量的呢?到底是將形式參數name的值傳遞給成員變量name,還是反過來講成員變量name的值傳遞給形式參數name呢?
此時this這個關鍵字就起到作用了,這種情 況下使用this這個關鍵字代表的就是類中的成員變量,又叫做類的屬性。所以此時,為了明確的表示出哪一個是類中的屬性,就要加上“this.屬性名稱”的操作
這時,代表的就是類中的成員變量,而賦值號右邊的name則是方法的形式參數,代碼name就是將形式參數的值傳遞給成員變量。
其實如果是局部變量的話,也是相同的道理。在方法體內定義的變量稱為局部變量,在類的內部方法體的外部定義的變量稱為成員變量。如果成員變量和方法中的局部變量的名字相同時,那么在方法中成員變量將會被屏蔽。如果這個時候還要使用成員變量,就需要使用關鍵字this。使用this引用成員變量的方法格式:this.成員變量名。
既然this能夠調用本類中的成員變量,那么,this也可以調用本類中的成員方法。
一般情況下,在Java語言中引用成員變量或者成員方法都是以對象名.成員變量或者對象名.成員方法的形式。不過有些程序員即使在沒有相同變量的時候,也喜歡使用this.成員變量的形式來引用變量
這主要是從便于代碼的閱讀考慮。一看到這個this關鍵字就知道現在引用的變量是成員變量或者成員方法,而不是局部變量。這無形中就提高了代碼的閱讀性。
二、使用this調用構造方法
在一個Java類中,構造方法是一個與類同名的方法,必須與類的名字相同。而且在Java類中必須存在一個構造方法。如果在代碼中沒有顯示的體現構造方法的話,那么編譯器在編譯的時候會自動添加 一個沒有形式參數的構造方法。在一個類中可以存在多個構造方法,這些構造方法都采用相同的名字,只是形式參數不同。
Java語言就憑用戶的參數來判斷調用哪一個構造方法。當一個類中有多個構 造方法時,可以利用this關鍵字相互調用。假設,現在有一個類中存在多個構造方法,但是不管有多少個構造方法,只要對象一被實例化,就必須打印一句“新對象實例化”的信息出來,這時可以有兩種做法。
其他方法引用構造方法一樣,都是通過形式參數來調用構造方法。Java編譯器會根據所傳遞的參數數量的不同,來判斷該調用哪個構造方法。
所以,我們在實際編程的時候有時候需要在一個構造方法中對另一個構造方法進行調用。但是,在使用this關鍵字調用其他構造方法的時候,this()調用構造方法只能放在構造方法的首行,為的是能 夠為類中的屬性初始化;而且至少有一個構造方法是不用this調用,否則程序會出現錯誤。
注意的是,使用this調用構造方法只適用于構造方法的調用,類中的其他方法不能使用這種方法。
三、使用this引用當前對象
this最重要的特定就是表示當前對象,那什么叫當前對象呢?在Java中當前對象就是指當前正在調用類中方法的對象。使用this引用當前對象是指如果在類的方法中需要返回一個對象,并且該對象是方法所在的類的當前對象,可以使用this關鍵字作為方法的返回值。
一個無參的構造方法,一個提供一個參數用于設置姓名的構造方法,還有一個提供兩個參數用于設置姓名和年齡的構造方法,這三個方法都是用來打印新對象實例化的信息,很明顯,此 時如果在各個構造方法中編寫輸出語句肯定是不合適的,其中有一些代碼重復了,現在只是一行,所以感覺不出來,如果現在的代碼有很多行的話,以上代碼的缺陷就立刻顯現出來了。那么,最好讓 構造方法間進行相互的調用,這時就可以用“this(參數列表)”的形式完成
這里定義了一個返回類型為Car類型的方法getCarObject(),并使用this關鍵字返回當前的對象Car。在main()方法中創建一個Car對象并使用instanceof方法判斷getCarObject()方法返回的對象與Car 對象是否匹配。運行結果為true。
四、其他用法
除了上述情況外,this還可以用在其他場合。例如對象的比較,可以使用this和引用傳遞進行兩個對象是否相等的判斷。結束語:Java中的this與面向對象的程序設計密切相關,它表示當前對象。
但是,在不同的使用場合它表示的真正含義是不完全一樣的。this.成員變量、this.成員方法(參數列表):實際上都表示當 前對象中的屬性或當前對象調用的方法;this的核心表示當前對象,當前正在操作本方法的對象稱為當前對象;使用this可以調用其他構造方法,但是此語句必須放在構造方法的首行this的使用在節省代碼、區分局部變量與成員變量、對象的比較等方面起著重要的作用,編程時我們應當給予重視并能夠學會正確使用它。