若為一個類寫了多個構建器
那麼經常都需要在一個構建器裡調用另一個構建器
以避免寫重復的代碼
可用this關鍵字做到這一點
通常
當我們說this的時候
都是指
這個對象
或者
當前對象
而且它本身會產生當前對象的一個句柄
在一個構建器中
若為其賦予一個自變量列表
那麼this關鍵字會具有不同的含義
它會對與那個自變量列表相符的構建器進行明確的調用
這樣一來
我們就可通過一條直接的途徑來調用其他構建器
如下所示
//: Flower
java
// Calling constructors with
this
public class Flower {
private int petalCount =
;
private String s = new String(
null
);
Flower(int petals) {
petalCount = petals;
System
out
println(
Constructor w/ int arg only
petalCount=
+ petalCount);
}
Flower(String ss) {
System
out
println(
Constructor w/ String arg only
s=
+ ss);
s = ss;
}
Flower(String s
int petals) {
this(petals);
//! this(s); // Can
t call two!
this
s = s; // Another use of
this
System
out
println(
String & int args
);
}
Flower() {
this(
hi
);
System
out
println(
default constructor (no args)
);
}
void print() {
//! this(
); // Not inside non
constructor!
System
out
println(
petalCount =
+ petalCount +
s =
+ s);
}
public static void main(String[] args) {
Flower x = new Flower();
x
print();
}
} ///:~
其中
構建器Flower(String s
int petals)向我們揭示出這樣一個問題
盡管可用this調用一個構建器
但不可調用兩個
除此以外
構建器調用必須是我們做的第一件事情
否則會收到編譯程序的報錯信息
這個例子也向大家展示了this的另一項用途
由於自變量s的名字以及成員數據s的名字是相同的
所以會出現混淆
為解決這個問題
可用this
s來引用成員數據
經常都會在Java代碼裡看到這種形式的應用
本書的大量地方也采用了這種做法
在print()中
我們發現編譯器不讓我們從除了一個構建器之外的其他任何方法內部調用一個構建器
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26991.html