Android进阶–final、finally、finalize的理解

首先补充听课心得(二)内容:默认情况在Android Studio中使用try-with-resources会提示Try-with-resources requires API level 19的警告️ ,你需要自己再build.gradle文件中设置指定JDK版本:

1
2
3
4
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

问题:

  • final、finally、finalize有什么区别?

这是一道经典的基础面试题,这里不作分析,不了解的自己Google哦(它们除了字母类似,各自之间没啥关系,有点类似Java和JavaScript有啥关系了)

补充其他知识点:
  1. final也许会有性能的好处,比如利用final可能(注意是可能)对性能有好处。比如:可能有助于将方法进行内联,可以改善编译器进行条件编译的能力等等。日常开发中,除非有特别考虑,不然最好不要指望这种小技巧带来所谓的性能提升。
  2. 不要在finally中使用return语句,finally总是执行,除非程序或者线程被终止。比如以下代码:
1
2
3
4
5
6
//try-catch异常退出、不被执行
try{
system.exit(1)
}finally{
println("会被执行吗?")
}
1
2
3
4
5
6
7
8
//try-catch无线循环,不被执行
try{
while(true){
println("do something")
}finally{
println("会被执行吗?")
}
}

如果你非要在finally中使用return语句,请注意以下结论:

  • finally块的语句是在try|catch的return语句执行之后,返回之前(try|catch中return在返回前,将其他所有操作都执行完,保留返回的值)。
  • finally中return语句会覆盖try|catch中return语句直接返回。

具体代码实践请参考文章:Java finally语句到底是在return之前还是之后执行?
try-catch-finally语句中return的执行顺序思考

  1. final不是immutable。(类似:String为什么需要final修饰?HashMap、HashSet的键值为什么不要使用不可变类型?)除了immutable内部如何实现的,个人认为主要作用:
  • 安全,尤其并发的时候线程安全
  • 类似String设计成immutable有着一个字符串常量池的属性,这样存在大量字符串的时候,节省内存空间、提高效率。具体类似讨论可以参考知乎文章:在java中String类为什么要设计成final?
  1. 小插曲,对Java的finalizer,cleaner的理解。有兴趣可以参考文章:Java的finalizer,cleaner等如何实现? Effective Java 第三版——8. 避免使用Finalizer和Cleaner机制

参考:

声明:此为原创,转载请联系作者


作者:微信公众号添加公众号-遛狗的程序员 ,或者可以扫描以下二维码关注相关技术文章。

qrcode_for_gh_1ba0785324d6_430.jpg
当然喜爱技术,乐于分享的你也可以可以添加作者微信号:

WXCD.jpeg

文章目录
  1. 1. 问题:
    1. 1.1. 补充其他知识点:
|