簡體   English   中英

Java接口靜態字段延遲初始化

[英]Java interface static field 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;
    }
    static final int b = bInit();
}

A a = new B();

在 JDK8 和 JDK10 上都只打印"Class field" 直接訪問Aa產生其初始化和"Interface field"輸出。

這表明接口靜態字段初始化是惰性的,這對於最終靜態類字段而言並非如此。

我可以看到OpenJDK JEP 草案關於類的這種懶惰,但它是接口的記錄功能嗎? 或者只是JVM實現的一個細節?

這是一種記錄在案的行為。 接口A不會按照https://docs.oracle.com/javase/specs/jls/se12/html/jls-12.html#jls-12.4.1進行初始化。 它僅在調用字段a或方法aInit()時初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM