1 package model; 2 3 import java.io.ObjectStreamField; 4 import java.io.Serializable; 5 6 /** 7 * @author liangd 8 * date 2020-11-12 16:16 9 * code 實例化字段 10 */ 11 public class UserModel implements Serializable { 12 /* 13 * 實現java.io.Serializable這個接口是為序列化,serialVersionUID 用來表明實現序列化類的不同版本間的兼容性。 14 * 如果你修改了此類, 要修改此值。否則以前用老版本的類序列化的類恢復時會出錯。 15 * 16 * serialVersionUID作用: 17 * 序列化時為了保持版本的兼容性,即在版本升級時反序列化仍保持對象的唯一性。 18 * 19 * 生成serialVersionUID的兩種方式 20 * 1、默認的1L 21 * 2、根據類名、接口名、成員方法及屬性等來生成一個64位的哈希字段 22 */ 23 //默認 24 // private static final long serialVersionUID = 1L; 25 private static final long serialVersionUID = -8940196742313994740L; 26 private int id; 27 //被transient修飾的字段不會被實例化 28 // private transient String username; 29 private int age; 30 private int sex; 31 private String address; 32 33 /** 34 * 序列化字段的兩種方式: 35 * 1、默認方式,Java對象中的非靜態和非transient的字段都會被定義為需要序列的字段。 36 * 2、另外一種方式是通過 ObjectStreamField 數組來聲明類需要序列化的對象。 37 */ 38 private static final ObjectStreamField[] serialPersistentFields = { 39 new ObjectStreamField("username", String.class), 40 new ObjectStreamField("age", int.class) 41 }; 42 /* 43 Java 中進行序列化操作需要實現 Serializable 或 Externalizable 接口。 44 序列化的目的有兩個,第一個是便於存儲,第二個是便於傳輸。 45 一、序列化作用: 46 1、 提供一種簡單又可擴展的對象保存恢復機制。 47 2、 對於遠程調用,能方便對對象進行編碼和解碼,就像實現對象直接傳輸。 48 3、 可以將對象持久化到介質中,就像實現對象直接存儲。 49 4、 允許對象自定義外部存儲的格式。 50 51 二、何時需要實現序列化 52 在存儲時需要序列化 53 54 三、平常實體類沒有實現Serializable接口,怎么也能存進數據庫呢? 55 是因為在聲明變量的時候,例如String、int、Boolean等時,數據類型已經實現了序列化 56 */ 57 }