对于体例的建树,可将其想象成为自己写的每个类都挪用一次initialize {" e& Y2 P. t; @9 m1 A
System.out.println(# |- g7 `0 O! i: Z" J
"Creating Rock number " + i);5 ~5 c" ]- `* } \5 x. i6 a9 w" E2 ?
}
: k; W+ w; m5 O$ q. m/ ?, R3 G }public class SimpleConstructor {5 c) |: a. O4 n
public static void main(String[] args) {5 G. }) l7 ?' [
for(int i = 0; i < 10; i++)3 w1 {. f' z$ W3 D+ X* L( X' B* r
new Rock(i);. {% F- ^ X/ k% ]0 P" i
}
' a. ^, N8 E; B( \+ { k* R }操作构建器的自变量,我们可为一个对象的初始化设定响应的参数。举个例子来说,假设类Tree有一个构建器,它用一个整数自变量标识表记标帜树的高度,那么就可以象下面这样建树一个Tree对象:tree t = new Tree(12); // 12英尺高的树若Tree(int)是我们独一的构建器,那么编译器不会许可我们以其他任何体例建树一个Tree对象。
. g0 l5 \. ~2 {: y6 {, | 构建器有助于消弭年夜量涉及类的问题,并使代码更易阅读。例如在前述的代码段中,我们并未看到对initialize()体例的明晰挪用——那些体例在概念上自力于界说内容。在Java中,界说和初始化属于统一的概念——两者缺一不成。; s* w* R/ R( B) ?4 B0 K, i Y# [
构建器属于一种较非凡的体例类型,因为它没有返回值。这与void返回值存在着显明的区别。对于void返回值,尽管体例自己不会自动返回什么,但仍然可以让它返回另一些工具。构建器则分歧,它不仅什么也不会自动返回,而且根柢不能有任何选择。若存在一个返回值,而且假设我们可以自行选择返回内容,那么编译器若干好多要知道若何对阿谁返回值作什么样的措置。 |