看不懂这个异常 实现Serializable的类里边,没有定义serialVersionUID变量,采用了默认的值,一旦修改了类,这个值就变了。所以造成序列化或反序列化失败。解决办法:明确调用serialVersionUID变量,确保它的值不变,当然类的修改不应有太大的变化。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 刚学JAVA,不明白你说的问题,可以给我具体的代码吗!?麻烦你了! 例如:public class Aclass implements Serializable {private static final long serialVersionUID = 1L; // 定义一个这样的常量............} 不好意思!:(还是不懂!而且我在代码里面添加那句serialVersionUID常量,还是不能运行!哎,那个朋友能帮我解决,我再加30分! 恩,我发贴的时候忘记重写了,不过重写了也不行!我在Person类里加了:public int hashCode(){ return 7*name.hashCode();}不过还是一样的问题!郁闷呀…… 楼主你的文件是写在C://IOExample/PhoneBook.bin请把你硬盘上的这个文件删掉,然后再运行程序就不会报错了。 To:fredonline(天天挨踢)郁闷了……这是为什么呢!?能给我解释一下吗!? Sorry,睡了个午觉。才看到。对于这种错误,我理解的很浅,只能大概说一下。请大家补充。所有implements Serializable的类,都会默认有一个自己的serialVersionUID。serialVersionUID就像是根据你这个类的内容计算出来的一个不会重复的串,目的很明显,唯一标示某一个类的版本。在你开始写这个程序的时候,并不是现在这种结构,比如说可能没有区号这个域。这时,你运行了程序,生成的文件保存在了硬盘上,我没仔细看程序,估计bin文件内已经有一个被序列化保存的PhoneBook类,其serialVersionUID = -3463812609891807143。然后你修改了程序,本地PhoneBook这个类的serialVersionUID已经自动改为9038356574367163630。这时,你想再从bin文件中反序列化老的数据并放到新的PhoneBook实例里,就会触发这个异常。请看上面trumplet(检查)的解释,他说的就是对的。然后chenxk(射线)说让你加上private static final long serialVersionUID = 1L;这的目的是硬性的给这个类声明一个ID,不要它自己计算,因此,不管你修改多少个版本,至少JVM都认为是一个版本。在进行序列化和反序列化的时候,会隐藏掉一些异常,老版本的数据没准儿也能成功地进行反序列化。前提如trumplet(检查)所说,类的改变不要太大就可以。 关于输入验证的问题求教各位达人 一个关于多态性的小问题 \t 这个制表字符,我从来就没用好过。有时宽,有时窄,有人知道怎么使用吗? 如何判断一个字符串内包含另外一个字符串? SOS!!!CheckboxMenuItem怎么用??? 用JAVA做文件上传如何处理??? awt包的问题 怎样访问父类的父类成员?super.super为什么不允许? 如何实现用java下载文件?在线等待答复!谢谢 有没有西安的java 程序员 新手求教,继承中调用父类构造方法的问题 hibernate立功啦,它继承了java的优秀传统,JamesGosling在这一刻灵魂附体...
......}
还是不懂!而且我在代码里面添加那句serialVersionUID常量,还是不能运行!
哎,那个朋友能帮我解决,我再加30分!
我在Person类里加了:
public int hashCode(){
return 7*name.hashCode();
}
不过还是一样的问题!
郁闷呀……
你的文件是写在C://IOExample/PhoneBook.bin
请把你硬盘上的这个文件删掉,然后再运行程序
就不会报错了。
郁闷了……这是为什么呢!?能给我解释一下吗!?
对于这种错误,我理解的很浅,只能大概说一下。请大家补充。
所有implements Serializable的类,都会默认有一个自己的serialVersionUID。
serialVersionUID就像是根据你这个类的内容计算出来的一个不会重复的串,目的很明显,唯一标示某一个类的版本。
在你开始写这个程序的时候,并不是现在这种结构,比如说可能没有区号这个域。
这时,你运行了程序,生成的文件保存在了硬盘上,我没仔细看程序,估计bin文件内已经有一个被序列化保存的PhoneBook类,其serialVersionUID = -3463812609891807143。
然后你修改了程序,本地PhoneBook这个类的serialVersionUID已经自动改为9038356574367163630。
这时,你想再从bin文件中反序列化老的数据并放到新的PhoneBook实例里,就会触发这个异常。
请看上面trumplet(检查)的解释,他说的就是对的。
然后chenxk(射线)说让你加上private static final long serialVersionUID = 1L;
这的目的是硬性的给这个类声明一个ID,不要它自己计算,因此,不管你修改多少个版本,至少JVM都认为是一个版本。在进行序列化和反序列化的时候,会隐藏掉一些异常,老版本的数据没准儿也能成功地进行反序列化。前提如trumplet(检查)所说,类的改变不要太大就可以。