??Java編譯器并不是簡單的為每個(gè)引用都創(chuàng)建一個(gè)默認(rèn)對(duì)象,如果想初始化這些引用可以在代碼中的下列位置進(jìn)行:
1.在定義對(duì)象得地方,這意味著他們總是能夠被構(gòu)造器調(diào)用之前被初始化。
2.在類的構(gòu)造器中。
3.就在正要使用這些對(duì)象之前,這種方式稱為惰性初始化,在生成對(duì)象不值得級(jí)不必每次生成對(duì)象的情況下,減少額外的負(fù)擔(dān)。
4.使用實(shí)例初始化。
class Soap {
private String s;
Soap() {
System.out.println("Soap()");
s = "Constructed";
}
@Override
public String toString() {
return s;
}
}
public class Bath {
private String
s1 = "Happy", // 定義初始化
s2 = "Happy",
s3, s4;
private Soap castile;
private int i;
private float toy;
public Bath() {
System.out.println("Inside Bath()");
s3 = "Joy";
toy = 3.14f;
castile = new Soap(); // 在類的構(gòu)造器中被初始化
}
{
i = 47; // 實(shí)例初始化
}
@Override
public String toString() {
if (s4 == null)
s4 = "Joy"; // 惰性初始化
return "s1 = " + s1 + "\n" +
"s2 = " + s2 + "\n" +
"s3 = " + s3 + "\n" +
"s4 = " + s4 + "\n" +
"i = " + i + "\n" +
"toy = " + toy + "\n" +
"castile = " + castile;
}
public static void main(String[] args) {
Bath b = new Bath();
System.out.println(b);
}
} /* Output:
Inside Bath()
Soap()
s1 = Happy
s2 = Happy
s3 = Joy
s4 = Joy
i = 47
toy = 3.14
castile = Constructed
*///~