final、finally与finalize的区别

一、final(修饰符)

根据修饰的对象不同,有不同的效果。但其本质上表示一种最终状态,即一个不可改变的实体,只能被分配一次。

修饰对象 效果
类 不能被继承,final类中的方法默认也是final
方法 不能被重写,private类型的方法默认是final的
成员变量 不能被重新赋值,即常量(必须在声明的同时赋值)

二、finally(总是执行)

一般作用在try-catch代码块中形成try-catch-finally代码块。finally代码块中放置一些必须执行的代码,即不论是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。

但由于finally用法的特殊性,即使在try-catch代码块中执行了return语句,其会撤销之前的return语句,继续执行最后的finally代码块中的代码;

注意:如果在try语句块中执行了System.exit (0) 语句,即直接终止了Java虚拟机的运行,所以finally语句块不会执行;

三、finalize()(一个GC方法)

finalize()是Java中的一个方法名,Java使用finalize()方法在垃圾收集器将该对象从内存中清除出去之前,做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没被引用时,才会对这个对象调用finalize()方法。

它是在顶级类Object中定义的,因此所有的类都继承了它,子类重写finalize()方法以整理系统资源或者执行其他清理工作。