final作用:
1、final修饰的变量不可以第二次赋值
2、final修饰的方法不可以被重写
3、final修饰的类不可以被继承
4、final可以防止指令重排序(指令重排序:预想的执行顺序和程序运行的顺序不一致,提高程序的灵活性这是在单线程,多线程下变量多了,可能会相互影响),保障多线程下的可见性。
final最好修饰基本类型数据或者本地内存地址不可变类型数据:
如下图,用final来修饰数组b时,整体将b重新赋值不可以,但是如图将数组内部小模块修改是可以的,而final修饰变量目的是为零让其值不在发生变化,所以一般不修饰复杂类型。
final、finally、finalize区别:
final 修饰变量、方法、类,修饰变量时表示变量是一个常量,不能再被赋值;修饰方法时表示方法不能被重写;修饰类时表示类不能被继承。
final也可以防止指令重排序,保证多线程下的安全性。
finally 用在try-catch(保证线程不会被中断)语句中,finally后面跟着的代码块表示无论是否抛出异常,改代码块一定会被执行。一般用于需要释放资源的情况(资源一定会关闭,避免堆积)。
finalize 是Object类的方法,每一个对象都有这么个方法,在该对象被回收的时候被调用,因为无法确定该方法什么时候被调用,所以很少使用。