java 學習第三節--this的用法


<span style="font-size:18px;color:#ff0000;"><strong>this關鍵字主要有三個應用:</strong></span>
 (1)this調用本類中的屬性,也就是類中的成員變量;
 (2)this調用本類中的其他方法;
 (3)this調用本類中的其他構造方法,調用時要放在構造方法的首行。
Public Class Student { 
 String name; //定義一個成員變量name
 private void SetName(String name) { //定義一個參數(局部變量)name
  this.name=name; //將局部變量的值傳遞給成員變量
 }
}
<pre name="code" id="answer-content-1304566898" class="answer-text mb-10" style="margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: arial, "courier new", courier, 宋體, monospace; white-space: pre-wrap; word-wrap: break-word; font-size: 14px; line-height: 24px; background-color: rgb(255, 255, 255);"><span style="color: rgb(51, 51, 51);">如果在某個變量前面加上一個this關鍵字,其指的就是這個對象的成員變量或者方法,而不是指成員方法的形式參數或者局部變量。爲此在上面這個代碼中,</span><span style="color:#ff6666;">this.name代表的就是對象中的成員變量,又叫做對象的屬性,而後面的name則是方法的形式參數,代碼this.name=name就是將形式參數的值傳遞給成員變量</span><span style="color:#333333;">。這就是上面這個代碼的具體含義</span>
<span style="color:#333333;">
</span>
<span style="color:#333333;"></span><pre name="code" id="answer-content-1304566898" class="answer-text mb-10" style="margin-top:0px; margin-bottom:10px; padding:0px; font-family:arial,'courier new',courier,宋體,monospace; white-space:pre-wrap; word-wrap:break-word; color:rgb(51,51,51); font-size:14px; line-height:24px; background-color:rgb(255,255,255)"> 其實如果是局部變量的話,也是相同的道理。如在上面的代碼中,name不是形式參數,而是一個局部變量。此時Java也會遇到相同的疑惑,即變量名name代表的到底是局部變量還是形式參數?name=name到底代表的是什麼含義?根據局部變量的作用域,在方法內部,如果局部變量與成員變量同名的話,那麼是以局部變量爲準。可是在name=name這個賦值語句中,將局部變量的值賦值給自己,顯然並不是很合適。根據代碼的含義,本來的意思應該是將局部變量賦值給成員變量。爲了更清晰的表達這個含義,爲此最好採用如下的書寫格式this.name=name。這裏的this關鍵字含義就是對象名student,爲此this.name就表示student.name。


<pre name="code" id="answer-content-1304566898" class="answer-text mb-10" style="margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: arial, "courier new", courier, 宋體, monospace; white-space: pre-wrap; word-wrap: break-word; line-height: 24px; background-color: rgb(255, 255, 255);"><span style="font-size:18px;color:#ff0000;"><strong>應用二:調用類的構造方法</strong></span><span style="font-size: 14px; color: rgb(51, 51, 51);">
public class Student { //定義一個類,類的名字爲student。 
 public Student() { //定義一個方法,名字與類相同故爲構造方法
  this(“Hello!”);
 }
 public Student(String name) { //定義一個帶形式參數的構造方法
 }
}
  this關鍵字除了可以調用成員變量之外,還可以調用構造方法。在一個Java類中,其方法可以分爲成員方法和構造方法兩種。構造方法是一個與類同名的方法,在Java類中必須存在一個構造方法。如果在代碼中沒有顯示的體現構造方法的話,那麼編譯器在編譯的時候會自動添加一個沒有形式參數的構造方法。這個構造方法跟普通的成員方法還是有很多不同的地方。</span><span style="color:#ff0000;font-size: 14px;"><strong>如構造方法一律是沒有返回值的,而且也不用void關鍵字來說明這個構造方法沒有返回值</strong></span><span style="color: rgb(51, 51, 51); font-size: 14px;">。</span><span style="font-size:18px;color: rgb(51, 51, 51);"><strong>而普通的方法可以有返回值、也可以沒有返回值,程序員可以根據自己的需要來定義</strong></span><span style="color:#333333;font-size: 14px;">。不過如果普通的方法沒有返回值的話,那麼一定要在方法定義的時候採用void關鍵字來進行說明。</span><strong style="font-size: 14px;"><span style="color:#3366ff;">其次構造方法的名字有嚴格的要求,即必須與類的名字相同</span></strong><span style="color: rgb(51, 51, 51); font-size: 14px;">。也就是說,Java編譯器發現有個方法與類的名字相同才把其當作構造方法來對待。而對於普通方法的話,則要求不能夠與類的名字相同,而且多個成員方法不能夠採用相同的名字。</span><span style="font-size:24px;color:#6633ff;">在一個類中可以存在多個構造方法,這些構造方法都採用相同的名字,只是形式參數不同</span><span style="font-size:24px;color:#6666cc;">。</span><span style="color: rgb(51, 51, 51); font-size: 14px;">Java語言就憑形式參數不同來判斷調用那個構造方法。
 在上面這段代碼中,定義了兩個構造方法,一個帶參數,另一個沒有帶參數。構造方法都不會有返回值,不過由於構造方法的特殊性,爲此不必要在構造方法定義時帶上void關鍵字來說明這個問題。在第一個沒有帶參數的構造方法中,使用了this(“Hello!”)這句代碼,這句代碼表示什麼含義呢?在構造方法中使this關鍵字表示調用類中的構造方法。如果一個類中有多個構造方法,因爲其名字都相同,跟類名一致,那麼這個this到底是調用哪個構造方法呢?其實,這跟採用其他方法引用構造方法一樣,都是通過形式參數來調用構造方法的。</span><span style="font-size: 14px;"><span style="color:#330099;">如上例中,<strong>this關鍵字後面加上了一個參數,那麼就表示其引用的是帶參數的構造方法。如果現在有三個構造方法,分別爲不帶參數、帶一個參數、帶兩個參數。那麼Java編譯器會根據所傳遞的參數數量的不同,來判斷該調用哪個構造方法</strong>。</span></span><span style="color: rgb(51, 51, 51); font-size: 14px;">從上面示例中可以看出,this關鍵字不僅可以用來引用成員變量,而且還可以用來引用構造方法。
 不過如果要使用這種方式來調用構造方法的話,有一個語法上的限制。</span><span style="font-size: 14px;"><span style="color:#cc66cc;"><strong>一般來說,利用this關鍵字來調用構造方法,只有在無參數構造方法中第一句使用this調用有參數的構造方法。否則的話,翻譯的時候,就會有錯誤信息</strong></span></span><span style="font-size: 14px;"><span style="color:#333333;">。這跟引用成員變量不同。</span><strong><span style="color:#663300;">如果引用成員變量的話,this關鍵字是沒有位置上的限制的</span></strong><span style="color:#333333;">。如果不熟悉這個限制的話,那麼還是老老實實的採用傳統的構造方法調用方式爲好。雖然比較麻煩,但是至少不會出錯。</span></span>
<span style="font-size: 14px;"><span style="color:#333333;">
</span></span>
<span style="font-size: 14px;"><span style="color:#333333;">
</span></span>
<strong><span style="font-size:18px;color:#ff0000;">應用三:返回對象的值</span></strong><span style="color: rgb(51, 51, 51); font-size: 14px;">
 this關鍵字除了可以引用變量或者成員方法之外,還有一個重大的作用就是返回類的引用。如在代碼中,</span><strong><span style="font-size:24px;color:#ff0000;">可以使用return this,來返回某個類的引用</span></strong><span style="color: rgb(51, 51, 51); font-size: 14px;">。此時這個this關鍵字就代表類的名稱。如代碼在上面student類中,那麼代碼代表的含義就是return student。可見,這個this關鍵字除了可以引用變量或者成員方法之外,還可以作爲類的返回值,這纔是this關鍵字最引人注意的地方。</span>


<span style="color:#333333;">
</span>



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