我想到了一个奇怪的想法。由于Java允许最终变量只设置一次,如果我可以将变量初始化为自身,我可以有效地获得一个未初始化的变量。现在,当然,以下不起作用,因为编译器适当地抱怨“空白的最终字段TEST可能尚未初始化”:
public class Test
{
public static final int TEST;
static
{
TEST = TEST;
}
public static void main(String[] args)
{
System.out.println(Test.TEST);
}
}
但稍作修改后,我可以将其编译,并打印出以前无法打印的“未初始化的值”。 (见下文)这是设计成语言的一部分吗?在连续多次运行这些其他程序,切换掉开关等时,我已经看到输出“0”和“1”从这个函数打印出来,这告诉我这真的是一个未初始化的值那些碰巧在记忆中漂浮的东西。这是一个错误吗?
public class Test
{
public static final int TEST;
static
{
// TEST = TEST;
TEST = initialValue();
}
public static int initialValue()
{
return Test.TEST;
}
public static void main(String[] args)
{
System.out.println(TEST);
}
}