final:Java中的不可变
final用于类上,表示当前类是最终类,不能被imp也不能被extends(防止子类修改方法的行为,String、Integer都是这样)
final用于成员变量上,分为两种情况
一种是用于基础数据类型上(int、long、short、byte、char、double、float、boolean)这类值就无法修改了
final int MAX_VALUE = 100; // MAX_VALUE = 200; // 编译错误,不能修改final变量
另一种情况是用于引用数据类型上,虽然引用的对象不可被修改,但是引用的对象内部的属性还是可以被修改的
final用于方法上:当前方法不能被子类重写,不能被动态代理(会导致头上的注解失效)
final用于方法形参:方法内部参数不可被修改,类似于成员变量,如果是引用数据类型,那么引用的对象内部的属性还是能改的
final变量必须在被声明或者被构造时初始化,即要么直接value=?,要么在构造时必须加入这个参数,lombok中的@RequiredArgsConstructor即对final修饰的关键字实现构造。
上述种种,final的不可变性能够为程序带来健壮性和稳定性,也会降低代码的灵活性