private static final long serialVersionUID =

来源:学生作业帮助网 编辑:作业帮 时间:2024/10/07 00:41:57
private static final long serialVersionUID =
xWnUyiRRJ@髛LQj[i'q| vI8-8%=v1>3~Xi"D3sξ;WXA0ahD0m&ōX(8sˈC_\>r'v.\N^>|>BPKoPa[ZvKW)1,+Jy6v,n稘uӢjoi̎H6H<=0RΊ:N_ᙒw(]M G(R[TωCWp˘y-L r==oηdR{;mkDԻS@ܹu6D.kn|p+.r~Zw6M{.#j}\JnQFO>(7<&̊ݙ ^%|x(P0+8 ;k&#0~2_` tZ@#LqMw3o0J}۪ի5uVEvS"\HfTwv,4u${IG;V%&L=m5}<9FƫSΉ1 4؎ xiY:~+Q눜⬵k{)R-tUMf9"EDUr;;@IN8L\O2 MnQ}x=/ TmK[( (y<+ӴD=@Nom-RyǕy8NnJJ}ST%dng(o2 RHXXg Dl :*h[J^[!M_JjT#:`yK5OQc(Ua0I]nwČlbL(7ùXpIm?V٠q{] 2EgiJrp0PKRa\m|F J,|` S~CέtO*"BbV!% TMnn<ù ۟~1egŇcM.4ܜm Ǹe[9|ҶKI9J%5NnX)-s;*X ;vubeg*f/Ek %ÑwMGܟo(b ըvweQbxKgijgioU.|zyK?dÏ.}t' Ĕc=(y%{C;n߾MG$i/c<wC̴%~rP'n5oIS!Pfu Σj1ME¨13D{U{2JUHd2(C=q¤=Q8 `HX,GWf$a@܋W| ;׉j!V-17xny~WVI 0@5-ےy)i}PAngeeIom]mka*wfW7ČU!Jt΢"/0?9p8Px[Guh2T!٥txt٘t6_9[ù V8rEJvވ7sXQ#[2VEPO}Ucj

private static final long serialVersionUID =
private static final long serialVersionUID =

private static final long serialVersionUID =
实现java.io.Serializable这个接口是为序列化,serialVersionUID 用来表明实现序列化类的不同版本间的兼容性.如果你修改了此类,要修改此值.否则以前用老版本的类序列化的类恢复时会出错.
实现后如果你用的是工具的话会出来警告,他会提示你,可以自动生成private static final long serialVersionUID = 1L;
为了在反序列化时,确保类版本的兼容性,最好在每个要序列化的类中加入private static final long serialVersionUID这个属性,具体数值自己定义.
在JDK中,可以利用JDK的bin目录下的serialver.exe工具产生这个serialVersionUID,如对于Test.class可执行如下命令:serialver Test.
这样,即使某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确反序列化.否则,如果不显式定义该属性,这个属性值将由JVM根据类的相关信息计算,而修改后的类的计算结果与修改前的类的计算结果往往不同,从而造成对象的反序列化因为类版本不兼容而失败.
不显式定义这个属性值的另一个坏处是,不利于程序在不同的JVM之间的移植.因为不同的编译器实现该属性值的计算策略可能不同,从而造成虽然类没有改变,但是因为JVM不同,出现因类版本不兼容而无法正确反序列化的现象出现.
当我们的系统不太经常需要序列化类时,可以去掉这些警告,做如下设置:Window-->Preferences-->Java,将serializable class without serialVersionUID的设置由warning改为Ignore.然后Eclipse会重新编译程序,那些警告信息也就消失了.
最后的建议是,如果我们开发大量需要序列化的类的时候,我们最好还是还原为原来的设置.这样可以保证系统的性能和健壮.
关于serialVersionUID的解释
serialVersionUID作用:
序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性.
你可以随便写一个,在Eclipse中它替你生成一个,有两种生成方式:
一个是默认的1L,比如:private static final long serialVersionUID = 1L;
一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:private static final long serialVersionUID = -8940196742313994740L;之类的.
Eclipse提示The serializable class XXX does not declare a static final serialVersionUID field of type long
那是Eclipse提供这个提示功能给你吧.
你点它warning的icon两下Eclipse就会自动给定.
如果你不喜欢,可以把它关掉,
windows -> preferences -> compiler -> Error/Warnings
-> Potential Programming problems
将Serializable class without serialVersionUID的warning改成ignore.
其实如果你没有考虑到兼容性问题时,那就把它关掉吧.
其实有这个功能是好的.
只要任何类别实作了Serializable这个介面,
如果没有加入serialVersionUID,Eclipse都会给你warning提示,
这个serialVersionUID为了让该类别Serializable後兼容.
考虑一下,如果今天你的类Serialized存到硬碟里,
可是後来你却更改了类别的field(增加或减少或改名).
当你Deserialize时,就会出现Exception.这样就会做成不兼容性的问题.
但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize.
这个可以避开不兼容性的问题.
异常状态:
The serializable class XXX does not declare a static final serialVersionUID field of type long