为了账号安全,请及时绑定邮箱和手机立即绑定

如图所示 出现这种差异的原因

如图所示https://img1.sycdn.imooc.com//5b15675d00014eb606100375.jpg



https://img1.sycdn.imooc.com//5b1567720001528706940418.jpg

下面是老师写的 上面是我写的 

不是说实现了序列化接口的类的构造函数不会被调用吗   

正在回答

4 回答

问题原因:

//由于你的代码多了下面这一行
Bar2 bar2 = new Bar2();
//新建一个Bar2对象。调用new方法时,程序会自动调用Bar2的构造方法
//你控制台多出那一行bar2,就是这个Bar2的构造方法输出的

解决方法:

//注释掉或者直接删除下面这行代码可以得到和老师同样的结果
//Bar2 bar2 = new Bar2();
//该程序是为了测试反序列化得到对象是否调用其构造方法
//因此重新新建一个Bar2的实体对象是完全没有必要的,反而会混淆测试结果
0 回复 有任何疑惑可以回复我~
#1

yyz要学java 提问者

非常感谢!
2018-06-27 回复 有任何疑惑可以回复我~
#2

yyz要学java 提问者

I got it.
2018-06-27 回复 有任何疑惑可以回复我~
#3

HungerCheung 回复 yyz要学java 提问者

我的回答可以对您有所帮助。如果你在学习与工作用有什么关于java se的基础问题,可以私我。我会尽快回复。
2018-06-28 回复 有任何疑惑可以回复我~
#4

yyz要学java 提问者 回复 HungerCheung

Ok 感谢大佬
2018-06-28 回复 有任何疑惑可以回复我~
查看1条回复

既然新建了一个Bar2的对象,执行构造方法时,为什么不依次输出Bar Bar1 Bar2,而是只输出了bar2呢?

0 回复 有任何疑惑可以回复我~

这个还真没有 如果同时进行的话好像会报错的

0 回复 有任何疑惑可以回复我~

你是不是同时进行序列化和反序列化?这样是不行的,要先进行序列化时把反序列化注释掉,进行反序列化时把序列化注释掉。因为在序列化时会对子类进行实例化,然后会调用子类和父类的所有构造方法,在进行反序列化时如果不将序列化注释掉你就分不清构造函数到底是实例化时打印的还是序列化接口类调用的,希望对你有帮助

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

如图所示 出现这种差异的原因

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信