gpt4 book ai didi

java - java 7 中的静态初始化

转载 作者:行者123 更新时间:2023-12-02 04:40:49 27 4
gpt4 key购买 nike

我有一个将类初始化为的代码:

private static MyClass myObj = new MyClass();

我在下面的代码中使用 myObj 。如果使用 Java 6,这可以正常工作。但是当我使用 Java 7 时,会抛出 NullPointerException

java.lang.NullPointerException
Exception in thread "main" java.lang.ExceptionInInitializerError

作为解决方法,我在使用 myObj 之前对它进行了空检查并使其正常工作。

但是我仍然很困惑 Java 7 实现中是否有任何更改导致静态初始化失败?

编辑:发现 OpenAM 也面临类似的问题.

最佳答案

我们需要更多代码示例和异常堆栈跟踪来进行诊断。

纯属猜测,我知道在 Java 7 中,他们稍微改变了类初始化

https://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.4.2

For each class or interface C, there is a unique initialization lock LC. The mapping from C to LC is left to the discretion of the Java Virtual Machine implementation. The procedure for initializing C is then as follows:

  1. Synchronize on the initialization lock, LC, for C. This involves waiting until the current thread can acquire LC.

这与以前的java不同,以前的java使用类对象本身作为锁。

不过,它不太可能对你的情况负责。

关于java - java 7 中的静态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30225240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com