Final可以用在三个地方:data, methods, and classes
1、Final data
俗称常量数据,分两种:
compile-time constant:编译器直接生成常量。(注意:后续Data的值如果发生了变化,必须将所有引用类重新编译。例如:Final int status=2。后续变化成了:Final int status=3。必须将所有引用类重新编译,否则status的值还是2,而不是3。)
run-time constanct:运行时进行初始化,并且不再修改。
需要注意的事:对于原始类型(primitive)的数据,是值不能改变。对于非原始类型的数据,即普通类的实例,则是reference不能改变,而值是可以改变的。
Final数据的初始化有两种:1、定义时直接赋值;2、定义时不赋值,后续类实例初始化时赋值。后一种也称为Blank Final。其可以通过不同的方法进行不同值的初始化,并且仍然保持final属性。
2、Final methods
Final的方法不能被重载。
Final方法与private方法的区别是:private虽然对于子类不能访问,但是可以重载。
3、Final Classes
Final的Class不能被继承。
建议:对于方法和类,不建议用Final。因为这样会约束类的多态性使用。