this從哪裏來?

先看下面程序: this從哪裏來?

public class This {
    private int x;

    public This(int x){
        this.x=x; //this
    }

    public void f(){
        System.out.println(x);
        System.out.println(this.x);
    }
    public static void main(String[] args) {
        This t=new This(10);
        t.f();
    }
}

我們通常在構造器中使用this來訪問由局部變量所屏蔽得成員變量。當然,this也可以再實例方法中使用,用來指代當前對象,只是我們一般會省略this,而是直接通過實例變量去訪問。
我們都知道,this指代的是當前對象,可是,this(當前對象)是從哪裏來的呢? 或者說,一個類可以創建無數個對象,並且每個對象都會堆上分配地址(空間),每個對象也都有自己的實例成員變量。當執行構造器或者實例方法的時候,系統怎麼知道我們要訪問的是哪個對象的x變量呢?
實際是這樣的,在構造器或者實例方法中,都有一個隱藏的參數,這個參數就是類的對象,當調用構造器或者實例方法的時候,就會將這個參數作爲第一個參數傳遞過去,因此,類中的構造器與f方法可以看作這樣的:

    public This(This this,int x){
        this.x=x;
    }

    public void f(This this){
        System.out.println(x);
        System.out.println(this.x);
    }

對於靜態方法,在方法調用的時候是沒有隱式參數(this)傳遞的,因爲靜態方法屬於類,與對象無關。所以,在靜態方法中不能使用this。

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