1. 程式人生 > >java中this 和 super關鍵字的作用

java中this 和 super關鍵字的作用

etag 傳遞 記錄 ont this spa 根據 普通 void

emmmmmm也真的是好久沒有寫過java了,
因為項目需要, 最近又必須重新拾起來了,雖然好多東西也都忘得差不多了....

然後發現 竟然把super和this傻傻分不清....

開個帖子記錄一下:

一、this關鍵字主要有三個應用:

 (1)this調用本類中的屬性,也就是類中的成員變量;
 (2)this調用本類中的其他方法;
 (3)this調用本類中的其他構造方法,調用時要放在構造方法的首行。


 應用一
1 Public Class Student { 
2  int age; //定義一個成員變量int
3  private void SetAge(int name) { //定義一個參數(局部變量)int
4 this.age=age; //將局部變量的值傳遞給成員變量 5 } 6 }  

 

這時候,我們程序有倆name 作為區分,this.name的強調是特指局部變量的name

而我們通過this.name=name 來表示 將成員變量傳遞給局部變量

應用二:調用類的構造方法
1 public class Student { //定義一個類,類的名字為student。 
2  public Student() { //定義一個方法,名字與類相同故為構造方法
3   this(“Hello!”);
4  }
5  public Student(String name) { //
定義一個帶形式參數的構造方法 6 } 7 }
this關鍵字除了可以調用成員變量之外,還可以調用構造方法。
在一個Java類中,其方法可以分為成員方法和構造方法兩種。
構造方法是一個與類同名的方法,在Java類中必須存在一個構造方法。
如果在代碼中沒有顯示的體現構造方法的話,那麽編譯器在編譯的時候會自動添加一個沒有形式參數的構造方法。
這個構造方法跟普通的成員方法還是有很多不同的地方。
如構造方法一律是沒有返回值的,而且也不用void關鍵字來說明這個構造方法沒有返回值。
而普通的方法可以有返回值、也可以沒有返回值,程序員可以根據自己的需要來定義。不過如果普通的方法沒有返回值的話,
那麽一定要在方法定義的時候采用void關鍵字來進行說明。其次構造方法的名字有嚴格的要求,即必須與類的名字相同。
也就是說,Java編譯器發現有個方法與類的名字相同才把其當作構造方法來對待。
而對於普通方法的話,則要求不能夠與類的名字相同,而且多個成員方法不能夠采用相同的名字。在一個類中可以存在多個構造方法,這些構造方法都采用相同的名字,只是形式參數不同。
Java語言就憑形式參數不同來判斷調用那個構造方法。 在上面這段代碼中,定義了兩個構造方法,一個帶參數,另一個沒有帶參數。
構造方法都不會有返回值,不過由於構造方法的特殊性,為此不必要在構造方法定義時帶上void關鍵字來說明這個問題。
在第一個沒有帶參數的構造方法中,使用了this(“Hello!”)這句代碼,這句代碼表示什麽含義呢?在構造方法中使this關鍵字表示調用類中的構造方法。
如果一個類中有多個構造方法,因為其名字都相同,跟類名一致,那麽這個this到底是調用哪個構造方法呢?
其實,這跟采用其他方法引用構造方法一樣,都是通過形式參數來調用構造方法的。如上例中,this關鍵字後面加上了一個參數,那麽就表示其引用的是帶參數的構造方法。
如果現在有三個構造方法,分別為不帶參數、帶一個參數、帶兩個參數。那麽Java編譯器會根據所傳遞的參數數量的不同,來判斷該調用哪個構造方法。從上面示例中可以看出,this關鍵字不僅可以用來引用成員變量,而且還可以用來引用構造方法。 不過如果要使用這種方式來調用構造方法的話,有一個語法上的限制。
一般來說,利用this關鍵字來調用構造方法,只有在無參數構造方法中第一句使用this調用有參數的構造方法。否則的話,翻譯的時候,就會有錯誤信息。這跟引用成員變量不同。如果引用成員變量的話,this關鍵字是沒有位置上的限制的。如果不熟悉這個限制的話,那麽還是老老實實的采用傳統的構造方法調用方式為好。雖然比較麻煩,但是至少不會出錯。

java中this 和 super關鍵字的作用