美文网首页
Android进阶–final、finally、finalize

Android进阶–final、finally、finalize

作者: 遛狗的程序员 | 来源:发表于2018-07-22 18:22 被阅读11次

    首先补充听课心得(二)内容:默认情况在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有啥关系了)

    补充其他知识点:
    1. final也许会有性能的好处,比如利用final可能(注意是可能)对性能有好处。比如:可能有助于将方法进行内联,可以改善编译器进行条件编译的能力等等。日常开发中,除非有特别考虑,不然最好不要指望这种小技巧带来所谓的性能提升。
    2. 不要在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的执行顺序思考

    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

    相关文章

      网友评论

          本文标题:Android进阶–final、finally、finalize

          本文链接:https://www.haomeiwen.com/subject/wbcrmftx.html