final、finally、finalize的區別 – 《Java核心技術》筆記

final可以用來修飾變量、類、方法,final修飾的變量不可修改,final修飾的類不可擴展,final修飾的方法不可重寫。

finally是保證重點代碼一定要被執行到的機制。

finalize是Object的一個方法,它的設計目的是保證對象在被垃圾收集前完成特定資源的回收,已經不被推薦使用。推薦使用Cleaner機制:

public class CleaningExample implements AutoCloseable {
        // A cleaner, preferably one shared within a library
        private static final Cleaner cleaner = <cleaner>;
        static class State implements Runnable { 
            State(...) {
                // initialize State needed for cleaning action
            }
            public void run() {
                // cleanup action accessing State, executed at most once
            }
        }
        private final State;
        private final Cleaner.Cleanable cleanable
        public CleaningExample() {
            this.state = new State(...);
            this.cleanable = cleaner.register(this, state);
        }
        public void close() {
            cleanable.clean();
        }
    }

注意點:

final不是immutable,java語言沒有原生的不可變支持,如果要實現immutable的類,需要做到:

  • 將class自身聲明為final,這樣就不能通過擴展來繞過;
  • 所有成員變量聲明為private和final,不要實現setter;
  • 構造對象時,成員變量使用深拷貝,而不是直接賦值,確保輸入對象不被其他人修改;
  • 如果需要實現getter,或者其他可能返回內部狀態的方法,使用copy-on-write。

原文 

http://yizhanggou.top/final-finally-finalizede-qu-bie/

本站部分文章源于互聯網,本著傳播知識、有益學習和研究的目的進行的轉載,為網友免費提供。如有著作權人或出版方提出異議,本站將立即刪除。如果您對文章轉載有任何疑問請告之我們,以便我們及時糾正。

PS:推薦一個微信公眾號: askHarries 或者qq群:474807195,里面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

轉載請注明原文出處:Harries Blog? » final、finally、finalize的區別 – 《Java核心技術》筆記

贊 (0)
分享到:更多 ()

評論 0

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
手机彩票计划软件超稳