final、finally、 finalize 有什么不同?

1、final

final 是 java 中的关键字,可用于修饰类,方法,变量。

推荐使用 final 关键字来明确表示我们代码的语义、逻辑意图,这已经被证明在很多场景下是非常好的实践。
当修饰类时,表明这个类不可被继承。Java 中有一些核心类都被 final 修饰了,比如 String,System。当考虑到安全性原因时,可以将该类设计成 final。

当修饰方法时,表明该方法不可被重写。一般是某些流程控制不希望被修改掉时,可以将这些方法声明成 final,比如 View 中的 measure(),requestFocus(),findViewById()。

当修饰变量时,表明该变量为常量,不允许被重新赋值,因此声明成 final 的变量都需要显示的进行赋值,否则编译会报错。所以,可以用于保护只读数据,尤其是在并发编程中,因为明确地不能再赋值 final 变量,有利于减少额外的同步开销,也可以省去一些防御性拷贝的必要。

2、finally

finally 则是 Java 保证重点代码一定要被执行的一种机制。通常的用法都是在 finally 里进行一些资源的关闭,回收。比如 IO 流的关闭等等。

不要在finally代码块中处理返回值。

注意以下这种情况finally是不会被执行的。

try {
  // do something
  System.exit(1);
} finally{
  System.out.println(“Print from finally”);
}

3、finalize

finalize 是基础类 java.lang.Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。

finalize 机制现在已经不推荐使用,并且在 JDK 9开始被标记为 deprecated。

为什么呢?简单说,你无法保证 finalize 什么时候执行执行的是否符合预期。使用不当会影响性能,导致程序死锁、挂起等。如果确实需要额外处理,可以考虑 Java 提供的 Cleaner可以考虑 Java 提供的 Cleaner 机制或者其他替代方法。

Java 平台目前在逐步使用 java.lang.ref.Cleaner 来替换掉原有的 finalize 实现。Cleaner 的实现利用了幻象引用(PhantomReference),这是一种常见的所谓 post-mortem 清理机制。

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

相关阅读更多精彩内容

  • 谈谈final、finally、finalize有什么不同? final可以用来修饰类、方法、变量,分别有不同的意...
    L_live阅读 249评论 0 0
  • 基本知识 final可以用来修饰类,方法,变量,分别有不同的意义。final修饰类表示不可以继承扩展;final的...
    erki_stwee阅读 219评论 0 0
  • 谈谈 final、finally、 finalize 有什么不同? 典型回答final 可以用来修饰类、方法、变量...
    wuchao226阅读 171评论 0 0
  • 文章写于四年前,那时候,我还是一个任性的小女孩,不懂得爱,却依旧爱,总以为,只要不分开,那就是永恒。 该从什么时候...
    心有余响阅读 337评论 0 1
  • GIS中文全称“地理信息系统”,这是我上大学所学专业。 今天培训课上在提到无人机航拍的时候,教官着重讲了讲GIS知...
    牧_童阅读 254评论 0 1

友情链接更多精彩内容