13. import java.io.*;
14. class Food {Food() { System.out.print(”1”); } }
15. class Fruit extends Food implements Serializable {
16. Fruit() { System.out.print(”2”); } }
17. public class Banana2 extends Fruit { int size = 42;
18. public static void main(String [] args) {
19. Banana2 b = new Banana2();
20. b.serializeBanana2(b); // assume correct serialization
21. b = b.deserializeBanana2(b); // assume correct
22. System.out.println(” restored “+ b.size + “ “); }
23. // more Banana2 methods
24. }
What is the result?
A. Compilation fails.
B. 1 restored 42
C. 12 restored 42
D. 121 restored 42
E. 1212 restored 42
F. An exception is thrown at runtime.为什么会出两次12呢??还有20,21行是什么意思呢??可序列化是什么意思??
    高手帮我讲解一下~~谢谢

解决方案 »

  1.   

    b.serializeBanana2(b); // assume correct serialization
    21. b = b.deserializeBanana2(b); // assume correct
    你的这两个方法不了解。如果没有这两个方法,输出结果为:12restored42
      

  2.   


    没看出来那个1是怎么出来的,也许是接口Serializable中定义的方法然后在b.serializeBanana2(b); // assume correct serialization 
    21. b = b.deserializeBanana2(b); // assume correct 这2段代码中输出了!
      

  3.   

    public interface Serializable类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
    20. b.serializeBanana2(b); // assume correct serialization
    21. b = b.deserializeBanana2(b); // assume correct
    这两条费解..期待正解
      

  4.   

    13. import java.io.*;
    14. class Food {Food() { System.out.print(”1”); } }
    15. class Fruit extends Food implements Serializable {
    16. Fruit() { System.out.print(”2”); } }
    17. public class Banana2 extends Fruit { int size = 42;
    18. public static void main(String [] args) {
    19. Banana2 b = new Banana2();  //创建Banana2对象,此处会执行Food和Fruit的构造函数,所以会输出12
    20. b.serializeBanana2(b); // assume correct serialization 序列化
    21. b = b.deserializeBanana2(b); // assume correct  此处反序列化,因为Food是Banana2的一个
    22. System.out.println(” restored “+ b.size + “ “); }
    23. // more Banana2 methods
    24. }
    19行:创建Banana2对象,此处会执行Food和Fruit的构造函数,所以会输出12
    20行:序列化
    21行:反序列化
    21行:此处反序列化,因为Food是Banana2的一个父类,但其没有实现Serializable接口,要想正确反序列化,它必须得有无参构造函数,反序列化时就会执行这个构造函数。而Food有无参构造函数“Food() { System.out.print(”1”); }”,所以输出1关于序列化和反序列化,介意LZ看书去吧,偶表达能力实在....说不清楚....
      

  5.   

    我是这样理解的:
    序列化的过程呢就是把对象一整个的写入字节流和从字节流中读取对象,而不用单独的把某个属性值什么的一条条写入。玩单机游戏的时候的存档实现的就是这样一个序列化的过程:
        把你游戏场景里面的人物山水极品武器等等属性整个以对象的形式存起来,如果你手工编程一条一条写入存档文件的话那就得累死,所以JAVA提供了一个序列化的接口,只要实现了这个接口的类就可以 以对象流的形式整个存取,而不必一条条的写入。
    可以参考:
    http://publish.it168.com/2005/0819/20050819037201.shtml