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

来源:6-3 序列化中子父类构造函数问题

yyz要学java

2018-06-05 00:24

如图所示https://img.mukewang.com/5b15675d00014eb606100375.jpg



https://img4.mukewang.com/5b1567720001528706940418.jpg

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

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

写回答 关注

4回答

  • HungerCheung
    2018-06-27 11:56:49
    已采纳

    问题原因:

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

    解决方法:

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

    yyz要学j... 回复Hunger...

    Ok 感谢大佬

    2018-06-28 22:21:35

    共 4 条回复 >

  • 慕慕3388578
    2020-12-16 17:45:42

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

  • yyz要学java
    2018-06-10 11:39:04

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

  • 慕UI1804229
    2018-06-08 17:46:06

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

文件传输基础——Java IO流

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

133754 学习 · 1030 问题

查看课程

相似问题