当我试图写出这样的东西时:
public interface MyInterface {
static {
System.out.println("Hello!");
}
}
编译器无法编译它。但是,当我写了类似这样的内容时:
interface MyInterface {
Integer iconst = Integer.valueOf(1);
}
我反编译了它,看到了静态初始化:
public interface MyInterface{
public static final java.lang.Integer i;
static {};
Code:
0: iconst_1
1: invokestatic #1; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
4: putstatic #2; //Field i:Ljava/lang/Integer;
7: return
}
你能否向我解释一下这种行为?
static { ... }
块也不会被执行)。因此,可能会让开发人员感到惊讶的行为是,既使用实现接口的类,也不会触发接口初始化,甚至调用其上的接口方法也不会触发(更不直观的是,default
方法会改变这一点)。 - Holger