Java-L03: final, finally, finalize

李文轩 2019-03-17
声明:这是本人学习极客时间的Java核心36讲的笔记,有侵权请联系我。


final:

  • 修饰 类、方法、变量
  • final 修饰的 class 不可以继承扩展
  • final 修饰的 变量不可被改变
  • final 修饰的 方法不可被重写(override

用 final 的好处和目的:

  • 将方法或者类申明为 final,明确此处不得修改

    • 避免 API 使用这更改基础功能
  • 将参数或者变量申明为final,避免意外赋值

    • 保护只读数据
    • 在并发编程中,有利于减少同步开销
  • 不需要特别用来提升性能

final 不是 immutable:

  • final 只限定引用不再被赋值,但对象行为不会被影响
  • 如果要实现 immutable 的类:
    1. class 申明为 final
    2. 将变量定义为finalprivate,也不要设置setter方法
    3. 通过深度拷贝来完成初始化(字节数组流,对象流),而不是直接赋值
    4. 如果实现getter方法,使用copy-on-write原则,建立私有的copy

finally :

  • 用于保证重点代码一定被执行的机制

  • 通常用于异常处理机制中,不管如何,都要执行的代码

  • 例外的是,exit 和 线程中断后,finally 的代码将不会被执行

    实践:

    • try - catch - finally
    • try-witch-resource

finalize

  • 基础类,java.lang.Object 的一个方法
  • 现在已不推荐使用
  • 目的为 保证对象在 gc 完成特定的资源回收
  • 无法保证什么时候执行,执行是否符合预期

java.lang.ref.Cleaner来代替finalize

  • Cleaner的实现利用流幻象引用(PhantomReference),即post-mortem清理机制
  • 每个Cleaner的操作都是独立的,有自己的运行线程,避免意外死锁。
  • !!!但是不能依赖 Cleaner 来做资源回收

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容