Java之final、finally、finalize的区别
1.final
final 表示最终的、不可改变的。用于修饰类、方法和变量。被final修饰的类不能被继承,被final修饰的方法不能被重写,被final修饰的变量不能被改变(值不能改变)。
2.finally
finally 是异常处理关键字,是异常处理的一部分,它只能用在try/catch语句中,表示希望finally语句块中的代码最后一定被执行(但是不一定会被执行)。
3.finalize
finalize()是在java.lang.Object里定义的,Object的finalize方法什么都不做,对象被回收时finalized方法会被调用。
特殊情况下,可重写finalize方法,当对象被回收的时候释放一些资源。但注意,要调用super.finalize()。
面试追加提问
finally是否总是会被执行?
回答:答案是否定的。首先在大家的印象中,无论程序是否出现异常,finally代码块是一定会执行的,这个观点是不太准确的。它只是表示希望finally语句块中的代码最后一定被执行,注意是希望!希望!希望!。
以下几种情况发生finally语句块中的代码就不一定会被执行:
1.程序在try-catch代码块之外直接返回并未执行到finally语句块(return)。
2.程序又发生了其他异常并未执行到finally语句块(i = i / 0)。
3.程序系统退出并未执行到finally语句块(System.exit(0))。