java 中序列化與readResolve()方法的實例詳解
java 中序列化與readResolve()方法的實例詳解
readResolve方法是作用是什么?這個方法跟對象的序列化相關(這樣倒是解釋了為什么 readResolve方法是private修飾的)。 怎么跟對象的序列化相關了?
下面我們先簡要地回顧下對象的序列化。一般來說,一個類實現(xiàn)了 Serializable接口,我們就可以把它往內存地寫再從內存里讀出而"組裝"成一個跟原來一模一樣的對象。不過當序列化遇到單例時,里邊就有了個問題:從內存讀出而組裝的對象破壞了單例的規(guī)則。單例是要求一個JVM中只有一個類對象的,而現(xiàn)在通過反序列,一個新的對象克隆了出來。如下例所示:
Java代碼:
public final class MySingleton implements Serializable { private MySingleton() { } private static final MySingleton INSTANCE = new MySingleton(); public static MySingleton getInstance() { return INSTANCE; } }
當把 MySingleton對象(通過getInstance方法獲得的那個單例對象)序列化后再從內存中讀出時,就有一個全新但跟原來一樣的MySingleton對象存在了。那怎么來維護單例模式呢?這就要用到readResolve方法。 如下所示:
public final class MySingleton implements Serializable{ private MySingleton() { } private static final MySingleton INSTANCE = new MySingleton(); public static MySingleton getInstance() { return INSTANCE; } private Object readResolve() throws ObjectStreamException { // instead of the object we're on, // return the class variable INSTANCE return INSTANCE; } }
這樣,當JVM從內存中反序列化地"組裝"一個新對象時,就會自動調用這個 readResolve方法來返回我們指定好的對象了,單例規(guī)則也就得到了保證。
以上就是java 中序列化與readResolve()方法的實例,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
Java web Hibernate如何與數(shù)據(jù)庫鏈接
這篇文章主要介紹了Java web Hibernate如何與數(shù)據(jù)庫鏈接,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06springsecurity?登錄認證流程分析一(ajax)
這篇文章主要介紹了springsecurity?登錄認證一(ajax篇),本文通過實例代碼圖文相結合給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-08-08Java中字符數(shù)組、String類、StringBuffer三者之間相互轉換
這篇文章主要介紹了Java中字符數(shù)組、String類、StringBuffer三者之間相互轉換,需要的朋友可以參考下2018-05-05Java調用shell命令涉及管道、重定向時不生效問題及解決
這篇文章主要介紹了Java調用shell命令涉及管道、重定向時不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12org.slf4j.Logger中info()方法的使用詳解
這篇文章主要介紹了org.slf4j.Logger中info()方法的使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12解決Springboot不能自動提交數(shù)據(jù)庫連接問題
在使用SSM框架開發(fā)時,若在同一Service內部方法間互相調用,直接使用this關鍵字會導致事務管理失效,從而引發(fā)如數(shù)據(jù)庫連接不足等問題,原因是通過this調用不會經(jīng)過Spring的代理,因此不會自動進行事務處理2024-09-09Spring Boot集成Druid數(shù)據(jù)庫連接池
這篇文章主要介紹了Spring Boot集成Druid數(shù)據(jù)庫連接池,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04