gpt4 book ai didi

java - 如果类 X 中的静态初始化程序调用 Y 中的方法,但 Y 的静态初始化程序调用 X 中的方法来设置其静态值,该怎么办?

转载 作者:行者123 更新时间:2023-12-01 14:58:56 25 4
gpt4 key购买 nike

这个问题在JAVA PROGRAMMING LANAGUAGE书中提出并解释了。但是我不清楚解释。

有人可以解释得更清楚吗?

书中的解释是::

在编译期间无法可靠地检测到这种循环静态初始化,因为编译 X 时可能不会编写 Y 的代码。如果发生循环,X 的静态初始化器将被仅执行到调用 Y 的方法的点。当 Y 依次调用 X 方法时,方法运行时,其余静态初始值设定项尚未执行。 X 中没有的任何静态字段它们执行的初始化程序仍将具有默认值(false、'/u0000'、零或 null,具体取决于根据他们的类型)。

最佳答案

很简单:如果一个线程已经在初始化类 X,但由于其他原因需要初始化类 X(例如,因为类 Y 使用其中的某些内容),那么它会跳过它。所有静态变量都有默认值。

有关所发生情况的准确描述,请参阅 Java Language Specification, section 12.4.2 。特别是:

If the Class object for C indicates that initialization is in progress for C by the current thread, then this must be a recursive request for initialization. Release LC and complete normally.

关于java - 如果类 X 中的静态初始化程序调用 Y 中的方法,但 Y 的静态初始化程序调用 X 中的方法来设置其静态值,该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13971407/

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