java中的this

java中的this隨處可見,用法也多,現在整理有幾點:

1. this是指當前對象自己。 
當在一個類中要明確指出使用對象自己的的變量或函數時就應該加上this引用。如下面這個例子中: 

public class Hello { 

String s = "Hello"; 

public Hello(String s)
{ 
System.out.println("s = " + s); 
System.out.println("1 -> this.s = " + this.s); 
this.s = s; 
System.out.println("2 -> this.s = " + this.s); 
} 

public static void main(String[] args) { 
Hello x="new" Hello("HelloWorld!"); 
} 
} 

運行結果: 

s = HelloWorld! 
1 -> this.s = Hello 
2 -> this.s = HelloWorld! 

在這個例子中,構造函數Hello中,參數s與類Hello的變量s同名,這時如果直接對s進行操作則是對參數s進行操作。若要對類Hello的成員變量s進行操作就應該用this進行引用。運行結果的第一行就是直接對構造函數中傳遞過來的參數s進行打印結果; 第二行是對成員變量s的打印;第三行是先對成員變量s賦傳過來的參數s值後再打印,所以結果是HelloWorld!

2. 把this作爲參數傳遞 
當你要把自己作爲參數傳遞給別的對象時,也可以用this。如: 

public class A { 
public A() { 
new B(this).print(); 
} 

public void print() { 
System.out.println("Hello from A!"); 
} 
} 

public class B { 
A a; 
public B(A a) { 
this.a = a; 
} 

public void print() { 
a.print(); 
System.out.println("Hello from B!"); 
} 
} 

運行結果: 
Hello from A! 
Hello from B! 

在這個例子中,對象A的構造函數中,用new B(this)把對象A自己作爲參數傳遞給了對象B的構造函數。

3. 注意匿名類和內部類中的中的this。 
有時候,我們會用到一些內部類和匿名類,如事件處理。當在匿?嘀杏胻his時,這個this則指的是匿名類或內部類本身。這時如果我們要使用外部類的方法和變量的話,則應該加上外部類的類名。如下面這個例子: 

public class A { 
int i = 1; 

public A() { 
Thread thread = new Thread() { 
public void run() { 
for(;;) { 
A.this.run(); 
try { 
sleep(1000); 
} catch(InterruptedException ie) { }

} 
} 
}; //注意這裏有; 
thread.start(); 
} 

public void run() { 
System.out.println("i = " + i); 
i++; 
} 

public static void main(String[] args) throws Exception { 
new A(); 
} 

} 

在上面這個例子中, thread 是一個匿名類對象,在它的定義中,它的 run 函數裏用到了外部類的 run 函數。這時由於函數同名,直接調用就不行了。這時有兩種辦法,一種就是把外部的 run 函數換一個名字,但這種辦法對於一個開發到中途的應用來說是不可取的。那麼就可以用這個例子中的辦法用外部類的類名加上 this 引用來說明要調用的是外部類的方法 run。

4。在構造函數中,通過this可以調用同一class中別的構造函數,如
public class Flower{ 
Flower (int petals){} 
Flower(String ss){} 
Flower(int petals, Sting ss){ 
//petals++;調用另一個構造函數的語句必須在最起始的位置 
this(petals); 
//this(ss);會產生錯誤,因爲在一個構造函數中只能調用一個構造函數 
} 
} 

值得注意的是:
1:在構造調用另一個構造函數,調用動作必須置於最起始的位置。
2:不能在構造函數以外的任何函數內調用構造函數。
3:在一個構造函數內只能調用一個構造函數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章