眾所周知,this的兩種用法非常普遍.
1.代替當前實例.例如this.成員變量名,this.成員方法名
2.代替構造函數,比如this().
上述兩點不再贅述.
但是,我覺得this還有一種現象大家可能沒有注意到:
可能有時候你會發現如下的現象:
以下為引用的內容:
public class Test implements Runnable{
Thread thread1;
Thread thread2;
public Test(){
thread1 = new Thread(this,"1");//---------------------->|
thread2 = new Thread(this,"2");//---------------------->|
}
public static void main(String args[]){
Test t = new Test();
t.startThreads();
}
public void run(){
//do thread's things
}
public void startThreads(){
thread1.start();
thread2.start();
}
}
在|處,你可能很奇怪:為什麼可以在還沒有創建的時候就可以自己調用自己呢?
為了講清楚上面的現象,必須先講清楚構造函數的繼承.
如果有兩個類成繼承關系,那麼
如果缺省構造器不顯式聲明,那麼子類構造器必先調用其父類缺省構造器(其實我覺得叫第一構造器更為合適,就是沒有入參的構造器),再調用自己的構造器。
下面我們接著談上面奇怪的現象,為什麼還可以在沒有創建子類對象的時候就可以用this代替本身呢?那是因為在調用子類構造器之前,已經調用了父類的缺省構造器(父類為Object).你還可以讓Test繼承一個類,看看是否先調用其父類的構造器.
在上文中,由於自身能力有限,並沒有將這個話題深入討論,只是膚淺得作以解釋,希望能夠拋磚引玉.請指正!