立即学习:https://edu.csdn.net/course/play/27126/355509?utm_source=blogtoedu
finally 从句说辞
- 不管是否发生异常,不管发生何种异常,finally从句代码会被执行
- 哪怕try和catch里有return,finally从句也会被执行
- 除非有system.exit(0)语句,finally从句菜不回被执行
- 画龙点睛:finally从句里,可以存放发回收资源得代码,比如释放数据库连接,释放IO对象,清空(clear)集合,设置大对象为null,以减少大对象的强引用,从而提升大对象的回收时间。
finalize方法的用途
-
相当于C++里的析构函数,对象被回收前,会调用该方法
-
建议不重写,采用Object类里默认的,即不做任何动作。
-
如果要重写,千万慎重,因为一旦没写号,会导致对象无法被回收,从而导致内存泄露
-
建议说辞:我知道finalize的作用,为了避免因错写而导致的对象无法回收,所以在项目里不重写。
final 作用在类上
- 可以作用在类上,表示这个类不能被继承
- final类的方法,会隐式地设置为final,即不可被覆盖
- 在详细设计阶段,如果有不想被继承的类,比如业务订单类,那么需要在类上加上final修饰
final作用在方法上
- 可以作用在方法上,表示该方法不能被覆盖
- 定义final方法的动机时,防止子类方法通过覆盖修改其中逻辑,
- 在详细设计阶段,如果在父类里定义的方法已经定型,而如果在子类里修改它会有逻辑错,那么可以加上final下修饰。
final作用在变量上
- 如果作用在基本数据类型上,该变量不能被修改,即为常量
- 如果作用在引用上,该引用不能再指向其他内存空间,但该引用指向的当前值,是可以改变的。
- 在实际项目里,一般是用final来定义常量
在面试中引出相关话题的技巧
在详细设计和代码review的过程,
- 哦们会根据业务需求,在相关类和方法前加final
- 我们的项目非常注意异常的处理 ,比如在finally从句里加入资源回收类代码。
- 在我们项目里,因为无须在对象回收前定义相关资源释放的动作,所以无需重写finalize方法,并且要确保所有类的该方法都不重写。