尽管上面的代码看起来像个方法,但它实际只是一段跟在static关键字后面的代码。与其他静态初始化动作一样,这段代码仅执行一次:当首次生成这个类的一个对象时,或者首次访问属于那个类的静态数据成员时(即便从未生成过那个类的对象)。
package equality;
class Mug{
Mug(int marker){
System.out.println("Mug("+marker+")");
}
void f(int marker){
System.out.println("f("+marker+")");
}
}
public class demo4 {
Mug mug1;
Mug mug2;
//初始化代码块,创建对象时自动执行
{
mug1=new Mug(1);
mug2=new Mug(2);
System.out.println("mug1 & mug2 initialized");
}
demo4(){
System.out.println("Mugs(");
}
demo4(int i){
System.out.println("Mugs(int)");
}
public static void main(String[] args){
System.out.println("Inside main()");
new demo4();
System.out.println("new Mugs() completed");
new demo4(1);
System.out.println("new Mugs(1) completde");
}
}
Inside main()
Mug(1)
Mug(2)
mug1 & mug2 initialized
Mugs(
new Mugs() completed
Mug(1)
Mug(2)
mug1 & mug2 initialized
Mugs(int)
new Mugs(1) completde