7.final, finalize 和 finally

内容提要:
• finally和finalize语法点和面试说辞

• final可以作用在类、方法和属性上

• 话题涉及到内存回收和面向对象设计,面试时该如何引出

finally从句的说辞(复习):

• 不管是否发生异常,不管发生何种异常,finally从句代码都会被执行

• 哪怕try和catch里有return,finally从句也会被执行

• 除非有System.exit(0)语句,finally从句才不会被执行 (项目里用到System.exit(0)的地方很少)

• 画龙点睛:finally从句里,可以存放回收资源的代码,比如释放数据库连接, 释放IO对象, 清空(clear)集合,设置大对象为 null,以减少大对象上的强引用,从而提升大对象的回收时间

finalize方法的用途:

• 相当于C++里的析构函数,对象被回收前,会调用该方法 ;

• 建议不重写,采用Object类里默认的,即不做任何动作;

• 如果要重写,千万慎重,因为一旦没写好,会导致对象无法被 回收,从而导致内存泄漏 ;

• 你有没有重写finalize方法?有些不知轻重的候选人会说重写过 ,但无法说出如何重写,为什么要重写。
• 建议说辞:我知道finalize的作用,为了避免因错写而导致的对象无法回收,所以在项目里不重写

final作用在类上
• 可以作用在类上,表示这个类不能被继承

• final类的方法,会隐式地设置为final,即不可被覆盖

• 在详细设计阶段,如果有不想被继承的类,比如业务订单类, 那么需要在类上加上final修饰

final作用在方法上
• 可以作用在方法上,表示该方法无法被覆盖

• 定义final方法的动机是,防止子类方法通过覆盖修改其中逻辑

• 在详细设计阶段,如果在父类里定义的方法已经定型,而如果 在子类里修改它会有逻辑错,那么可以加上final修饰


final作用在变量上
• 如果作用在基本数据类型上,该变量不能被修改,即为常量

• 如果作用在引用上,该引用不能再指向其它内存空间,但该引 用指向的当前值,是可以改变的

• 在实际项目里,一般是用final来定义常量


在面试中引出相关话题的技巧
• 在详细设计和代码Review的过程,我们会根据业务需求,在相关类和方法前加final,然后展开

• 我们的项目非常注意异常处理流程,比如在finally从句里加入资 源回收类代码,然后展开

• 在我们项目里,因为无需在对象回收前定义相关资源释放的动 作,所以无需重写finalize方法,并且要确保所有类的该方法都 不重写
总结
1. final,finally和finalize的语法 2. 如果没有特殊需求,不要重写finalize方法


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值