这个问题在 JAVA PROGRAMMING LANAGUAGE 书中提出并解释。但我不清楚解释。
有人可以更清楚地解释吗?
书中的解释是::
在编译期间无法可靠地检测到这种循环静态初始化,因为在编译 X 时可能不会编写 Y 的代码。如果发生循环,则 X 的静态初始化程序将仅执行到调用 Y 的方法的位置。当 Y 反过来调用 X 方法时,该方法将与尚未执行的其余静态初始化程序一起运行。X 中任何未执行初始化程序的静态字段仍将具有其默认值(false、'/u0000'、零或 null,具体取决于它们的类型)。