为什么第一静态代码块中的代码会编译报错,而第二个不会?
为什么第一静态代码块中的代码会编译报错,而第二个不会?
你把第五行final去掉呢?
// final 修饰的变量已经初始化过了,就不允许修改
// 下面这句相当于重新给它赋值,这是不允许的
Test.INSTANCE = new Test();
static{
Test.INSTANCE = new Test();
}
第一块静态代码块报错 因为静态代码块使用的是某个类的静态属性,他会认为该类的这个静态属性如果是常量就完成了初始化,所以不能修改。
static {
INSTANCE = new TEST();
}
第二块静态代码块不报错,是因为你的常量没有被初始化,要么声明初始化,要么静态代码块初始化,并且这个静态代码块是给当前类属性进行赋值
不知道你这个问题是否已经解决, 如果还没有解决的话: