Java技術:serialVersionUID作用介紹

? ? ? ? ? ? ? ?

  1. serialVersionUID概念介紹

英文翻譯的意思是序列化版本號。凡是實現Serializable接口的類都會有一個表示序列化版本標識符的靜態變量。

  1. serialVersionUID的生成方式

默認的1L:比如:private static final long serialVersionUID = 1L;?。

根據類名、接口名、成員方法及屬性等來生成一個64位的哈希字段:

比如:???? ?

private?static?final?long?serialVersionUID?=?3959055215634785113L;

  1. serialVersionUID原理

當定義一個實體類中如果沒有顯式的定義一個名為“serialVersionUID”、類型為long的變量時,Java序列化機制會根據編譯時的class自動生成一個serialVersionUID作為序列化版本比較,這種情況下,只有同一次編譯生成的class才會生成相同的serialVersionUID。比如,當我們編寫一個Java類時,隨著時間的推移,因為需求的改動,需要在該Java類中添加新的的字段,這個時候再反序列化時就會出現serialVersionUID不一致的情況,從而導致反序列化失敗。可以通過在本地Java類中添加一個“serialVersionUID”變量,值保持不變,便可以進行序列化和反序列化。如果Java類沒有顯示指定serialVersionUID,JVM會自動生成一個。

4、serialVersionUID作用?

序列化時為了保持版本的兼容性,即在版本升級時反序列化仍保持對象的唯一性。?

5、serialVersionUID注意事項

1.當實現java.io.Serializable接口的實體(類)沒有顯式地定義一個名為serialVersionUID,類型為long的變量時,Java序列化機制會根據編譯的class自動生成一個serialVersionUID作序列化版本比較用,這種情況下,只有同一次編譯生成的class才會生成相同的serialVersionUID 。如果我們不希望通過編譯來強制劃分軟件版本,即實現序列化接口的實體能夠兼容先前版本中未作更改的類,就需要顯式地定義一個名為serialVersionUID,類型為long的變量,不修改這個變量值的序列化實體都可以相互進行串行化和反串行化。?

2.記住應該總是在可序列化的類中包含這個字段,即使是在第一個類版本中,以便提醒自己這個字段的重要性。不要在未來的版本中改變這個字段值,除非你有意要改變類使其與舊的序列化對象不兼容。

3.如果你的類序列化到硬盤上面后,你更改了類別的field(增加或減少或改名),當你反序列化時,就會出現異常的,這樣就會造成不兼容性的問題。但當serialVersionUID相同時,它就會將不一樣的field以type的預設值Deserialize,這個可以避開不兼容性的問題。?

4.當我們的系統不太經常需要序列化類時,可以去掉這些警告,做如下設置:Window-->Preferences-->Java,將serializable class without serialVersionUID的設置由warning改為Ignore。然后Eclipse會重新編譯程序,那些警告信息也就消失了。但如果在開發大量需要序列化的類的時候,建議還原為原來的設置。這樣可以保證系統的性能和健壯。

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270671.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務雪崩

假設存在如下調用鏈 而此時,Service A的流量波動很大,流量經常會突然性增加!那么在這種情況下,就算Service A能扛得住請求,Service B和Service C未必能扛得住這突發的請求。 此時,如果Service C因為抗不住…

華為的型號命名規則_華為交換機s2700系列命名規則

華為交換機s2700系列命名規則華為交換機s2700系列命名規則上一篇我們聊到S2700系列機型的命名規則方法。基于要滿足不同用戶的市場需求,S2700系列提供了多款機型。咱們就以S2700-26TP-PWR-EI、S2710-52P-SI-AC、S2700-52P-EI-AC以及S2700-9TP-SI為模板來講解S2700系…

電腦技巧:Win10操作系統關閉這幾個功能,可以大幅度提升電腦的運行速度

目錄 一、禁用Cortana語音助手 二、關閉onedrive自動同步服務 三、關閉微軟自帶的Windows Search服務 四、關閉windows自動更新 五、清理緩存文件 六、減少不必要開機啟動項 今天小編給大家介紹一下Win10操作系統需要關閉的幾個功能,能讓你的電腦飛速運轉&#xff0…

mysql換成oracle_從mysql轉換到oracle數據庫

最近做了幾個項目,我對項目的要求(有些也是客戶的要求)都是既要能用mysql數據庫,又要能用oracle數據庫,開發時盡量用mysql,等到發布時要求兩者都能適應。因為兩種數據庫還是許多具體的應用有些不同,而我們開發中采用的…

硬件知識:視頻分配器、畫面分割器、矩陣、延長器相關知識介紹

目錄 1、視頻分配器 2、視頻切換器 3、視頻矩陣 4、畫面分割器 5、延長器 你知道視頻分配器,畫面分割器,矩陣各自的作用都是什么嗎?今天小編就為大家詳細的介紹下它們各自的區別。 1、視頻分配器 視頻分配器是一種把一個源平均分配成多路視頻…

UnityShader之Shader分類篇【Shader資料2】

關于ShaderLab,從我個人的理解上來看應該是分為三種類型。 1、Fixed function shader 固定渲染管線Shader,基于用于高級Shader在老顯卡無法顯示時的Fallback,使用的是ShaderLab語言,屬于真正的ShaderLab語言,和我們平時…

mysql 交叉連接_MySQL教程77-CROSS JOIN 交叉連接

之間所講的查詢語句都是針對一個表的,但是在關系型數據庫中,表與表之間是有聯系的,所以在實際應用中,經常使用多表查詢。多表查詢就是同時查詢兩個或兩個以上的表。在 MySQL 中,多表查詢主要有交叉連接、內連接和外連接…

python web django base skill

web框架本質 socket 業務邏輯框架實現socket tonado node.js 使用WSGI實現socket django flask 自己實現框架思路 wsgiref socket 路由系統 自己寫邏輯(views) jinja2 模板引擎(templates) 實現動態頁面,修改返回給瀏覽器的字符串 去…

電腦常見的VGA、DVI、PS/2、USB等接口知識筆記

我們經常見到電腦和網絡設備上都少不了VGA、DVI、PS/2、USB等常用接口,那些接口里面有多個針腳,他們每個針腳都有自己的用途,今天電腦學習小編就帶大家一起看看這些接口神秘用途。 現在很多朋友們可能會遇到VGA線或HDMI線不夠長,或…

mysql kill_Mysql使用kill命令解決死鎖問題(殺死某條正在執行的sql語句)

在使用mysql運行某些語句時,會因數據量太大而導致死鎖,沒有反映。這個時候,就需要kill掉某個正在消耗資源的query語句即可, KILL命令的語法格式如下:KILL [CONNECTION | QUERY] thread_id每個與mysqld的連接都在一個獨…

數據庫:MySQL、HBase、ElasticSearch三者對比

1、概念介紹 MySQL:關系型數據庫,主要面向OLTP,支持事務,支持二級索引,支持sql,支持主從、Group Replication架構模型(本文全部以Innodb為例,不涉及別的存儲引擎)。 HBas…

mysql 附加數據庫文件_mysql附加數據庫文件

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云數據庫專家保駕護航,為用戶…

SpringBoot集成Mybatis用法筆記

今天給大家整理SpringBoot集成Mybatis用法筆記。希望對大家能有所幫助&#xff01;搭建一個SpringBoot基礎項目。具體可以參考SpringBoot:搭建第一個Web程序引入相關依賴<dependencies><dependency><groupId>org.springframework.boot</groupId><ar…

wifi-mac

//18:a6:f7:12:0b:8b //18:a6:f7:1e:a9:57 //18:a6:f7:1f:8e:69 //18:a6:f7:12:0b:9c //18:a6:f7:1f:cd:d4 //18:a6:f7:1c:94:35 轉載于:https://www.cnblogs.com/mayidudu/p/5991781.html

網絡知識:交換機中的半雙工與全雙工知識筆記

今天小編給大家分享一下交換機中半雙工與全雙工相關知識&#xff0c;希望對大家能有所幫助&#xff01; 早期的網絡設備HUB&#xff08;集線器&#xff09;就是半雙工&#xff0c;目前基本沒有人用了&#xff0c;而現在用的SWITCH&#xff08;交換機&#xff09;就是全雙工。 a…

yum 安裝mysql 啟動_linux(centos6.9)下使用yum安裝mysql,及啟動MySQL等

查看系統自帶的mysql版本&#xff1a;rpm -qa | grep mysql卸載mysql&#xff1a;rpm -e mysql-libs-5.1.73-8.el6_8.x86_64 --nodeps1. 安裝mysql 服務器端&#xff1a;yum -y install mysql-server mysql-devel2. 安裝mysql客戶端&#xff1a;yum install mysql3. 啟動mysql服…

硬件知識:U盤插入電腦沒反應相關解決辦法整理

目錄 一、U盤可能被隱藏 二、USB端口被BIOS禁用 三、電腦的USB驅動可能有問題 今天小編給大家介紹一下U盤插入電腦沒反應相應的解決方案&#xff0c;希望對大家能有所幫助&#xff01; 一、U盤可能被隱藏 首先換臺電腦看看是不是U盤損壞的問題&#xff0c;如果不是&#xff0c;…