首先补充听课心得(二)内容:默认情况在Android Studio中使用try-with-resources会提示Try-with-resources requires API level 19的警告️ ,你需要自己再build.gradle文件中设置指定JDK版本:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
问题:
- final、finally、finalize有什么区别?
这是一道经典的基础面试题,这里不作分析,不了解的自己Google哦(它们除了字母类似,各自之间没啥关系,有点类似Java和JavaScript有啥关系了)
补充其他知识点:
- final也许会有性能的好处,比如利用final可能(注意是可能)对性能有好处。比如:可能有助于将方法进行内联,可以改善编译器进行条件编译的能力等等。日常开发中,除非有特别考虑,不然最好不要指望这种小技巧带来所谓的性能提升。
- 不要在finally中使用return语句,finally总是执行,除非程序或者线程被终止。比如以下代码:
//try-catch异常退出、不被执行
try{
system.exit(1)
}finally{
println("会被执行吗?")
}
//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的执行顺序思考
- final不是immutable。(类似:String为什么需要final修饰?HashMap、HashSet的键值为什么不要使用不可变类型?)除了immutable内部如何实现的,个人认为主要作用:
- 安全,尤其并发的时候线程安全
- 类似String设计成immutable有着一个字符串常量池的属性,这样存在大量字符串的时候,节省内存空间、提高效率。具体类似讨论可以参考知乎文章:在java中String类为什么要设计成final?
- 小插曲,对Java的finalizer,cleaner的理解。有兴趣可以参考文章:Java的finalizer,cleaner等如何实现? Effective Java 第三版——8. 避免使用Finalizer和Cleaner机制
参考:
- Java finally语句到底是在return之前还是之后执行?
- try-catch-finally语句中return的执行顺序思考
- Java的finalizer,cleaner等如何实现?
- Effective Java 第三版——8. 避免使用Finalizer和Cleaner机制
- 极客时间APP核心技术第三讲|谈谈final、finally、finalize有什么区别?
声明:此为原创,转载请联系作者
作者:微信公众号添加公众号-遛狗的程序员 ,或者可以扫描以下二维码关注相关技术文章。
qrcode_for_gh_1ba0785324d6_430.jpg当然喜爱技术,乐于分享的你也可以可以添加作者微信号:
WXCD.jpeg
网友评论