Java为什么我可以在初始化之前使用final变量?

时间:2017-08-23 18:33:31

标签: java jvm

我想到了一个奇怪的想法。由于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);
    }
}

0 个答案:

没有答案