结合Java面试题,深入理解Java(三)

经典的基础题目:
谈谈final,finally,finalize有什么不同

考点分析:
这是一个非常经典的Java基础问题,回答的时候,除了对基础语法和用途回答之外,还可以有多方面的深入探讨。面试官还可以考你对性能,并发,对对象生命周期或者垃圾收集基本过程等方面的理解。

一、final

final是可以用来修饰类、方法、变量,分别有不同的意义,final修饰的class代表不可以继承扩展;final修饰的变量是不可修改的;而final修饰的方法,也是不可以重写的(override)。同时,可以通过使用final关键字来明确代码语义以及逻辑意图。比如
1、将方法或者类声明为final,这样就可以明确告知别人,这些行为是不允许修改的。(也就是,这行代码,不准乱搞!),final的正确使用,可以有效避免API使用者更改基础功能,某种程度上,保证了平台或者项目的安全。

2、使用final修饰参数或者变量,也可以清楚地避免意外赋值导致地编程错误。

3、final变量产生了某种程度地不可变(immutable,但不等于immutable)的效果,可以用于保护只读数据,特别是在并发编程中,因为明确地不能再复制final变量,有利于减少额外地同步开销,也可以省去一些防御性拷贝的必要。

二、finally
finally则是Java保证重点代码一定被执行得一种机制。我们可以使用try-finally或者try-catch-finally来进行类似JDBC的链接,保证unlock等动作。不过,更推荐使用try-with-resource语句,能够更好地处理异常情况,编码量也少。另外还有个问题,看下面代码,会输出什么?

 try{
            //do something
            System.exit(1);
        }finally {
            System.out.print("1111111");
        }

上面finally的代码不会被执行哦。这是一个特例,谨记。

三、finalize
我们要明确它是不被推荐使用的,它不是一个好东西,在Java9中,甚至明确将它标记为deprfecated,没有特别原因,不要使用它,也不要指望它来进行资源回收。
为何?因为无法保证finalize什么时候执行,执行是否符合预期。使用不当是影响性能,导致程序死锁,挂起。

知识拓展:
1、注意,final不是immutable!
2、finalize真的那么不堪吗?
3、有什么机制可以替换finalize?
请关注我的公众号,查看结合Java面试题,深入理解Java(三),公众号不定期分享技术,以及我个人的学习笔记。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值