这个问题是我校招面试时遇到的一个问题,想想当时回答的并不够完善,最近听课学习,今天补充一下吧。
1.整体说一下
final可以用来修饰类、方法、变量,分别有不同的意义,fnal修饰的class代表不可以继承扩展,fnal的变量是不可以修改的,而fnal的方法也是不可以重写的(override)。
finally则是Java保证重点代码一定要被执行的一种机制。我们可以使用try-fnally或者try-catch-fnally来进行类似关闭JDBC连接、保证unlock锁等动作。
finalize是基础类java.lang.Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。fnalize机制现在已经不推荐使用,并且在JDK 9开始被标记为deprecated。
2.细说一下
(1)final:表示我们代码的语义、逻辑意图,比如:我们可以将方法或者类声明为fnal,这样就可以明确告知别人,这些行为是不许修改的。java.lang包下面的很多类,相当一部分都被声明成为final class.在第三方类库的一些基础类中同样如此,这可以有效避免API使用者更改基础功能,某种程度上,这是保证平台安全的必要手段。
(2)finally,明确知道怎么使用就足够了。Java语言的异常处理中,finally块的作用就是为了保证无论出现什么情况,finally块里的代码一定会被执行。由于程序执行return就意味着结束对当前函数的调用并跳出这个函数体,因此任何语句要执行都只能在return前执行(除非碰到exit函数),因此finally块里的代码也是在return之前执行的。此外,如果try-finally或者catch-finally中都有return,那么finally块中的return将会覆盖别处的return语句,最终返回到调用者那里的是finally中return的值。需要关闭的连接等资源,保证会执行
try {
// do something
Sysem.exit(1);
} fnally{
Sysem.out.println(“Print from fnally”);
}
一般我们普遍认为fnally中的程序无论无何都会被执行,但是存在特例:
当遇到exit()时,会直接退出程序,不会执行下边的finally中的语句。