Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java接口静态字段延迟初始化_Java_Static_Lazy Initialization - Fatal编程技术网

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是一个类,并且…
–不适用于接口,谢谢!“你想把它作为答案发布吗?”阿列克谢亚达莫夫斯基:当然,刚刚发布了。