关于静态的Java问题

关于静态的Java问题,java,static,Java,Static,我今天在我们的代码中遇到了这个bug,花了一段时间才弄明白。我发现它很有趣,所以我决定分享它。以下是问题的简化版本: public class Test { static { text = "Hello"; } public static String getTest() { return text + " World"; } private static String text = null; } 猜猜是什么Tes

我今天在我们的代码中遇到了这个bug,花了一段时间才弄明白。我发现它很有趣,所以我决定分享它。以下是问题的简化版本:

public class Test {

    static
    {
      text = "Hello";
    }

    public static String getTest() {
      return text + " World";
    }

    private static String text = null;
}

猜猜是什么
Test.getTest()返回&为什么?

它应该打印“空世界”。静态初始化按列出的顺序进行。如果将声明移到高于静态块的位置,则应得到“Hello World”。

它返回
null World
,因为
text
变量初始化了两次,第一次是“Hello”,第二次是null。
如果在静态初始化之前移动
文本
变量声明,您将得到
Hello World
答案应该是“null World”。

Java初始值设定项的执行顺序与它们在源代码中出现的顺序相同,因此在将null指定给文本之前,初始化块将运行


针对此类错误的专业提示:将静态变量设置为最终变量,或者根本不使用静态变量

它返回“null World”文档说明静态初始化按照它在源代码中出现的顺序进行,因此如果您将静态块向下移动到底部,它将返回“Hello World”

它将完全按照预期打印“null World”。你认为代码中到底有什么bug?@RMT我的意思是这是我们代码中的bug,我们并不打算出现当前的结果:)@LAS_VEGAS这更有意义
运行时系统保证静态初始化块按照它们在源代码中出现的顺序被调用。