1、先来看问题,编写测试类,定义一个常量;编译器给出的错误提示是常量TEST不能被分配,言外之意就是不允许修改TEST。
2、之前了解过,final修饰的变量的引用是不允许修改的(即引用的值不能变,也即不允许多次赋值),难道在静态代码块之前TEST已经被初始化,并分配内存了,然后我再次尝试修改常量就会抛出编译器错误。
3、看到这里,只能是 "=null",已经给常量赋值了,结果就不允许在静态代码块中赋值了。
4、所以修改TEST的声明,去掉“=null",结果就不报错了。
5、还有一点值得思考,就是final修饰的常量必须赋值,否则编译器会报错;
6、思考,这也就说明了几个问题:(1)声明常量和给常量赋值是两个过程,也可以在声明的时候直接赋值;即使用“=”赋值。(2)常量必须赋值。(3)“=null”,也是赋值(4)对于常量,只允许一次赋值。(常量就是只允许赋值一次的变量)
7、对于变量而言,Java会给声明的变量赋值初始值,比如对象的null、整形的0、String的null、浮点型的0.0等