对于体例的建树,可将其想象成为自己写的每个类都挪用一次initialize {
3 @9 Q* h0 ]8 f System.out.println(
7 a" p- i4 Y3 d3 W" x0 J" g "Creating Rock number " + i);
P) z6 h7 R5 T- @, p: H, ~ }6 `1 Q* M' _! u. X) R
}public class SimpleConstructor {1 K/ d- ]5 f. `3 h# n, z
public static void main(String[] args) {$ k& D |8 H8 w
for(int i = 0; i < 10; i++)
5 \( p6 u! u8 a$ P$ H new Rock(i);" s f, g+ i) B S. p; t; M; W- |
}
6 @" h5 P1 Z: L( H: { }操作构建器的自变量,我们可为一个对象的初始化设定响应的参数。举个例子来说,假设类Tree有一个构建器,它用一个整数自变量标识表记标帜树的高度,那么就可以象下面这样建树一个Tree对象:tree t = new Tree(12); // 12英尺高的树若Tree(int)是我们独一的构建器,那么编译器不会许可我们以其他任何体例建树一个Tree对象。
$ V3 }2 J: j( ]. _- [ 构建器有助于消弭年夜量涉及类的问题,并使代码更易阅读。例如在前述的代码段中,我们并未看到对initialize()体例的明晰挪用——那些体例在概念上自力于界说内容。在Java中,界说和初始化属于统一的概念——两者缺一不成。1 O! C8 f, Z, ~( W# W
构建器属于一种较非凡的体例类型,因为它没有返回值。这与void返回值存在着显明的区别。对于void返回值,尽管体例自己不会自动返回什么,但仍然可以让它返回另一些工具。构建器则分歧,它不仅什么也不会自动返回,而且根柢不能有任何选择。若存在一个返回值,而且假设我们可以自行选择返回内容,那么编译器若干好多要知道若何对阿谁返回值作什么样的措置。 |