若为一个类写了多个构建器那么经常都需要在一个构建器里调用另一个构建器以避免写重复的代码可用this关键字做到这一点 通常当我们说this的时候都是指这个对象或者当前对象而且它本身会产生当前对象的一个句柄在一个构建器中若为其赋予一个自变量列表那么this关键字会具有不同的含义它会对与那个自变量列表相符的构建器进行明确的调用这样一来我们就可通过一条直接的途径来调用其他构建器如下所示 //: Flowerjava // Calling constructors with this public class Flower { private int petalCount = ; private String s = new String(null); Flower(int petals) { petalCount = petals; Systemoutprintln( Constructor w/ int arg only petalCount= + petalCount); } Flower(String ss) { Systemoutprintln( Constructor w/ String arg only s= + ss); s = ss; } Flower(String s int petals) { this(petals); //!this(s); // Cant call two! thiss = s; // Another use of this Systemoutprintln(String & int args); } Flower() { this(hi ); Systemoutprintln( default constructor (no args)); } void print() { //!this(); // Not inside nonconstructor! Systemoutprintln( petalCount = + petalCount + s = + s); } public static void main(String[] args) { Flower x = new Flower(); xprint(); } } ///:~ 其中构建器Flower(String sint petals)向我们揭示出这样一个问题尽管可用this调用一个构建器但不可调用两个除此以外构建器调用必须是我们做的第一件事情否则会收到编译程序的报错信息 这个例子也向大家展示了this的另一项用途由于自变量s的名字以及成员数据s的名字是相同的所以会出现混淆为解决这个问题可用thiss来引用成员数据经常都会在Java代码里看到这种形式的应用本书的大量地方也采用了这种做法 在print()中我们发现编译器不让我们从除了一个构建器之外的其他任何方法内部调用一个构建器 |