java : in what order are static final fields initialized?

标签 java static initialization classloader final

好的,假设我有一个看起来像这样的类(class):

public class SignupServlet extends HttpServlet {
    private static final Logger SERVLET_LOGGER=COMPANYLog.open(SignupServlet.class);
    private static final ExceptionMessageHandler handler = new ExceptionMessageHandler();   
    private static final SignupServletObservableAgent signupObservableAgent = 
        new SignupServletObservableAgent(null, SERVLET_LOGGER);
}

我可以指望类加载器按顺序初始化这些字段,以便我可以依赖 SERVLET_LOGGER 在 signupObservableAgent 之前实例化吗?

最佳答案

是的,它们按照它们在源中出现的顺序进行初始化。您可以在 The Java Language Specification, §12.4.2 中阅读所有血腥细节.见第 9 步,内容如下:

... execute either the class variable initializers and static initializers of the class, or the field initializers of the interface, in textual order, as though they were a single block, except that final class variables and fields of interfaces whose values are compile-time constants are initialized first ...

关于 java : in what order are static final fields initialized?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4446088/

相关文章:

c++ - 使用派生类成员进行父类的初始化

c++ - 对 A::funcA(int) 的 undefined reference

html - 两个div,左边是static div,右边是fluid div

java - NullPointerException 或将打印静态变量的内容

java - 当应该获得百分比时却获得无穷大

c++ - C++ 中引用未初始化变量的安全性

c++ - 使用文本文件中的数据初始化对象数组

java - 不会抛出Java代理身份验证IOException

java - 排除 Eclipse Workbench 中的内置导入/导出向导

java - getISOCountries() 方法仅显示国家名称的两个字母。是否可以使用此方法获取国家/地区的全名?