Java 中也有类似的语法用来初始化每一个对象的非静态变量。例如:
//:c04:Mugs.java
// Java"Instance Initialization."
import com.bruceeckel.simpletest.*;
class Mug {
Mug(int marker) {
System.out.println("Mug(" + marker + ")");
}
void f(int marker) {
System.out.println("f(" + marker + ")");
}
}
public class Mugs {
static Test monitor = new Test();
Mug c1;
Mug c2;
{
c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
Mugs() {
System.out.println("Mugs()");
}
public static void main(String[] args) {
System.out.println("Inside main()");
Mugs x = new Mugs();
monitor.expect(new String[] {
"Insidemain()",
"Mug(1)",
"Mug(2)",
"c1 &c2 initialized",
"Mugs()"
});
}
} ///:~
你可以看到实例初始化子句:
{
c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
看起来它与静态初始化子句一模一样,只不过少了 static 关键字。这种语法对于支持“匿名
内部类(anonymousinner class)”(参见第 8 章)的初始化是必须的。
