final修饰类,表示该类不能被继承
final修饰属性,表示该属性类型是一个常量
final修饰方法,表示该方法不能重写,但是可以继承。
参考资料:你以为你真的了解final吗?
一、final的变量
1.1、final的成员变量
1.1.1、final修饰的成员变量的赋初值的时机
1.2、final的局部变量
final的局部变量必须显示赋值,并且不能对其修改;如果没有初始化,他只能赋值一次,再次赋值就会报错!
1.3、final修饰的数据类型真的不能被重新赋值吗?
1.3.1、final基本数据类型 vs final引用数据类型
final修饰的基本数据类型是不能被重新赋值的,但是final修饰的引用数据类型,只是他的引用不能变,但是他的属性是可以变的。
宏变量(即常量)
满足条件有以下三个:
1、被final修饰
2、声明变量时,进行初始化赋值
注意:当程序中其他地方使用该宏变量的地方,编译器会直接替换成该变量的值
二、final方法
2.1、父类的final方法是不能够被子类重写的
2.2、final方法是可以被重载的
三、final类
3.1、表示该类不能被继承(当子类继承父类时,父类可能会被子类修改属性的风险,所以当不想被子类继承,就用final修饰)
3.2、final的不可变类
被final修饰的类,创建实例时,实例变量不可改变。就是不可变类。
3.3、需满足以下几个条件:
1、用 private 和 final 修饰的实例变量
2、用带参的构造器初始化实例变量
3、仅能提供getter方法,不能提供setter方法,因为普通方法是不能初始化final修饰的成员变量
4、如果有必要就重写Object类 的hashCode()和equals()方法,应该保证用equals()判断相同的两个对象其Hashcode值也是相等的。