final、finally和finalize的区别
final
1)修饰变量,必须被初始化。在定义的时候,或者在初始化块或类的构造器中初始化。不可以在静态初始化块中初始化。
2)修饰静态变量,可以在静态初始化块中初始化,不可以在初始化块中初始化,不可以在类的构造器中初始化
3)final修饰的变量效率比普通变量更高。
4)修饰方法,该方法不能被子类重写
5)final类效率更高,是最终类,其属性可被修改,final不能修饰接口和抽象类。
finally
1)finally只能用在try/catch语句中并且附带着一个语句块,表示这段语句最终总是被执行。
2)finally语句块是在循环被跳过(continue)和中断(break),返回(return)之前之前被执行的。
3)使用system.exec()可以跳过finally语句。
注释:编译器在编译return new ReturnClass();时,将它分成了两个步骤,new ReturnClass()和return,前一个创建对象的语句是在finally语句块之前被执行的,而后一个return语句是在finally语句块之后执行的,也就是说finally语句块是在程序退出方法之前被执行的。
finalize
1)finalize是java.lang.Object类的一个方法,因此Java中所有类都从Object类中继承finalize()方法。
2)当垃圾回收器(garbage colector)决定回收某对象时,finalize()方法用作回收特殊渠道申请的内存,以及垃圾回收前的必要清理工作。