我今天在代码中遇到了这个错误,需要一段时间来计算。我发现它很有趣所以我决定分享它。以下是问题的简化版本:
public class Test {
static
{
text = "Hello";
}
public static String getTest() {
return text + " World";
}
private static String text = null;
}
猜猜Test.getTest();
返回什么&为什么呢?
答案 0 :(得分:18)
它应该打印“null world”。静态初始化按列出的顺序完成。如果您将声明移动到高于静态块,则应该获得“Hello World”。
答案 1 :(得分:1)
它返回“null World”文档声明静态初始化按它在源代码中出现的顺序发生,因此如果将静态块向下移动到底部,它将返回“Hello World”
答案 2 :(得分:0)
返回null World
因为text
变量初始化两次,第一次是“Hello”,第二次是null。
如果您在静态初始化之前移动text
变量声明,则会得到Hello World
。
答案 3 :(得分:0)
答案应该是“无效世界”。
答案 4 :(得分:0)
Java Initializers被定义为按照它们在源代码中出现的顺序执行,因此初始化块将在为文本赋值为null之前运行。
专业提示反对此类错误:使您的静态变量最终,或者根本不使用静态变量。