静态引用常量初始化编译出错

为什么第一静态代码块中的代码会编译报错,而第二个不会?
为什么第一静态代码块中的代码会编译报错,而第二个不会?

img

你把第五行final去掉呢?

// final 修饰的变量已经初始化过了,就不允许修改
// 下面这句相当于重新给它赋值,这是不允许的
Test.INSTANCE = new Test();



    static{
        Test.INSTANCE = new Test();
    }

第一块静态代码块报错 因为静态代码块使用的是某个类的静态属性,他会认为该类的这个静态属性如果是常量就完成了初始化,所以不能修改。

 static {
        INSTANCE = new  TEST();
    }

第二块静态代码块不报错,是因为你的常量没有被初始化,要么声明初始化,要么静态代码块初始化,并且这个静态代码块是给当前类属性进行赋值

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^