Java接口静态字段延迟初始化
举个例子Java接口静态字段延迟初始化,java,static,lazy-initialization,Java,Static,Lazy Initialization,举个例子 interface A { static int aInit() { System.out.println("Interface field"); return 42; } int a = aInit(); } class B implements A { static int bInit() { System.out.println("Class field"); return 42;
interface A {
static int aInit() {
System.out.println("Interface field");
return 42;
}
int a = aInit();
}
class B implements A {
static int bInit() {
System.out.println("Class field");
return 42;
}
static final int b = bInit();
}
A a = new B();
在JDK8和JDK10上,只打印“类字段”
。直接访问A.A
会生成其初始化和接口字段“
输出
这表明,接口静态字段初始化是延迟的,这对于最终的静态类字段是不正确的
我可以看出类的这种惰性,但它是接口的一个有文档记录的特性吗?或者只是JVM实现的一个细节?这是一个有文档记录的行为。接口
A
将不会按照初始化。它仅在调用字段a
或方法aInit()
时初始化。否,它表明使用类不一定加载其实现的接口,尤其是在不需要加载的情况下。这是一种记录在案的行为。接口A
将不会按照初始化。只有在调用字段a
或方法aInit()
时,才会初始化它。@manouti实际上,T是一个类,并且…
–不适用于接口,谢谢!“你想把它作为答案发布吗?”阿列克谢亚达莫夫斯基:当然,刚刚发布了。