import java.io.*;
class Food {Food(){System.out.println("1");}}class Fruit extends Food implements Serializable{
Fruit(){System.out.println("2");}}
public class Banana2 extends Fruit{
int size=42;
public static void main(String []args){Banana2 b=new Banana2();
b.serializeBanana2(b);
b=b.deserialazeBanana2(b);
System.out.println("restored"+b.size+" ");
}
}}
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
Answer: ( D )
因为父类Food未实现serializable接口,反序列化时将调用Food的构造函数
参考大纲:IO操作 — 序列化机制不明白请高手讲解
class Food {Food(){System.out.println("1");}}class Fruit extends Food implements Serializable{
Fruit(){System.out.println("2");}}
public class Banana2 extends Fruit{
int size=42;
public static void main(String []args){Banana2 b=new Banana2();
b.serializeBanana2(b);
b=b.deserialazeBanana2(b);
System.out.println("restored"+b.size+" ");
}
}}
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
Answer: ( D )
因为父类Food未实现serializable接口,反序列化时将调用Food的构造函数
参考大纲:IO操作 — 序列化机制不明白请高手讲解
解决方案 »
- 关于引用变量的疑问。
- 急急急!windows访问Linux服务器的时候,返回的报文少了数据。
- 怎么样SQL Server2000数据库 整张表里的内容输出到JTable里
- 如何设置方法参数约束条件
- java调用 关机命令,怎么写正确?
- 如何实现一个框架的关闭?
- 如何取得其它窗口中的鼠标事件
- 怎样指定JButton的位置,精确到坐标位置
- 安装JBUILDER的问题
- 关于线程内部run()方法和非run()方法的一个问题?
- java播放声音的问题!~
- java 反编译问题 The class file version is 49.0<only 45.3 and 46.0 are supported>
b=b.deserialazeBanana2(b);
这是什么方法?
import java.io.*;
class Food {
Food(){
System.out.println("1");
}
}class Fruit extends Food implements Serializable{
Fruit(){
System.out.println("2");
}
}
public class Banana2 extends Fruit{
int size=42;
public static void main(String []args){
Banana2 b=new Banana2();//1
/**
* 1.此处可以从类加载顺序的先后解决,JVM加载一个类的时候,
* 首先类加载器会查看该类有没有父类,如果有的话,那么先加载父类
* 所以这里的加载顺序就是Food-->Fruit-->Banana2
* 打印出12
*/
b.serializeBanana2(b);//2
/**
* 2.这里在晃点你,b序列化完之后还是b,因为它没有子类
*/
b=b.deserialazeBanana2(b);//3
/**
* 3.这里是反序列化,楼上说的很对,
* 如果父类不可以序列化,但是子类可以序列化
* 那么,反序列化子类对象的时候
* 首先要通过调用父类的无参的构造函数先构造出一个父类对象
* 所以反序列化b的时候,它会查看它的直接父类Fruit是否可以被序列化,
* 如果不可以,那么加载Fruit对象,
* 如果可以,并且有父类的时候,反序列化到其父类,
* 如果没有父类,什么都不执行,那么最后Food类不可以被序列化,
* 加载Food对象,这里打印出1,最后一句就不用说了
*/
System.out.println("restored"+b.size+" ");
}
}
希望对你有帮助!