this用法筆記(Java)


Java提供了this關鍵字,this關鍵字表示該類的對象的默認引用。this關鍵字最大的作用是,讓類的一個方法,訪問該類的另一個方法或者屬性。

this是指向對象本身的一個指針。

Java關鍵字this只能用於方法方法體內。當一個對象創建後,Java虛擬機(JVM)就會給這個對象分配一個引用自身的指針,這個指針的名字就是 this。因此,this只能在類中的非靜態方法中使用,靜態方法和靜態的代碼塊中絕對不能出現this,並且this只和特定的對象關聯,而不和類關聯,同一個類的不同對象有不同的this。
 
package test;
public class ThisTest {
    private int i=0;
    //第一個構造器:有一個int型形參
    ThisTest(int i){
       this.i=i+1;//此時this表示引用成員變量i,而非函數參數i
       System.out.println("Int constructor i——this.i:  "+i+"——"+this.i);
       System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1));
       //從兩個輸出結果充分證明了i和this.i是不一樣的!
    }
    //  第二個構造器:有一個String型形參
    ThisTest(String s){
       System.out.println("String constructor:  "+s);
    }
    //  第三個構造器:有一個int型形參和一個String型形參
    ThisTest(int i,String s){
       this(s);//this調用第二個構造器
       //this(i);
      
       this.i=i++;//this以引用該類的成員變量
       System.out.println("Int constructor:  "+i+"/n"+"String constructor:  "+s);
    }
    public ThisTest increment(){
       this.i++;
       return this;//返回的是當前的對象,該對象屬於(ThisTest)
    }
    public static void main(String[] args){
       ThisTest tt0=new ThisTest(10);
       ThisTest tt1=new ThisTest("ok");
       ThisTest tt2=new ThisTest(20,"ok again!");
      
       System.out.println(tt0.increment().increment().increment().i);
       //tt0.increment()返回一個在tt0基礎上i++的ThisTest對象,
       //接着又返回在上面返回的對象基礎上i++的ThisTest對象!
    }
}
 
運行結果:
 
Int constructor i——this.i:  10——11
String constructor:  ok
String constructor:  ok again!
Int constructor:  21
String constructor:  ok again!
14
 
this主要要三種用法:
1 表示對當前對象的引用!
2 表示用類的成員變量,而非函數參數,注意在函數參數和成員變量同名是進行區分!其實這是第一種用法的特例,比較常用,所以那出來強調一下。
3 用於在構造方法中引用滿足指定參數類型的構造器(其實也就是構造方法)。但是這裏必須非常注意:只能引用一個構造方法且必須位於開始!
還有就是注意:this不能用在static方法中。static方法中使用this會報錯。


用到this的情況:
1 通過this調用另一個構造方法,用發是this(參數列表),這個僅僅在類的構造方法中,別的地方不能這麼用。
2 函數參數或者函數中的局部變量和成員變量同名的情況下,成員變量被屏蔽,此時要訪問成員變量則需要用“this.成員變量名”的方式來引用成員變量。當然,在沒有同名的情況下,可以直接用成員變量的名字,而不用this,用了也不爲錯。
3 在函數中,需要引用該函所屬類的當前對象時候,直接用this。

發佈了6 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章