final作为Java语言中的一个保留的关键字,可以用来声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。
一、基本用法
1.修饰变量
凡是对成员变量或者局部变量声明为final的都为final变量。final变量经常和static关键字一起使用,用来定义程序中的常量。
final修饰基本数据类型的变量时,必须赋予初始值且不能被改变,修饰引用变量时,该引用变量不能再指向其他对象
当final修饰基本数据类型变量时不赋予初始值以及引用变量指向其他对象时就会报错
当final修饰基本数据类型变量被改变时,就会报错
2.修饰方法
final可以声明某个方法。方法前面加上final关键字,代表这个方法不可以被子类的方法重写。
final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。
如果父类的 final修饰的方法设置为private,则子类可以写一个同名的方法,此时 ,该同名的方法不再产生final的报错,而是在子类重新定义了一个方法。实际上,类的private方法会隐式地被指定为final方法。
3.修饰类
使用final来修饰的类叫作final类。final类不能被继承。
二、深入分析
被final修饰的对象内容是可变的
虽然若对象被final修饰,则该对象不可被继承,且该对象的引用地址不能被改变,但其内容依然可以被改变,这一点容易与被final修饰的基本数据类型变量无法被改变值的情况相混淆,需要加以区分。