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