Java序列化:无法生成Java docs 1.8中指定的运行时异常
我试图获取一些运行时异常,以验证Java序列化:无法生成Java docs 1.8中指定的运行时异常,java,serialization,Java,Serialization,我试图获取一些运行时异常,以验证Serializable接口的java文档。上面说 要允许序列化不可序列化类的子类型,请 子类型可能负责保存和恢复状态 超类型的公共、受保护和(如果可访问)包的 领域。只有当类 它有一个可访问的无参数构造函数来初始化 阶级的状态。如果出现以下情况,则声明类可序列化是错误的 事实并非如此。错误将在运行时检测到 我在这里编写了一些代码来测试它,但没有得到任何异常 class A { private A() { System.out.pr
Serializable
接口的java文档。上面说
要允许序列化不可序列化类的子类型,请
子类型可能负责保存和恢复状态
超类型的公共、受保护和(如果可访问)包的
领域。只有当类
它有一个可访问的无参数构造函数来初始化
阶级的状态。如果出现以下情况,则声明类可序列化是错误的
事实并非如此。错误将在运行时检测到
我在这里编写了一些代码来测试它,但没有得到任何异常
class A {
private A() {
System.out.println("private A");
}
public A(final int i) {
System.out.println("public A");
}
}
public class B extends A implements Serializable {
private static final long serialVersionUID = -2683305431271101335L;
public B(final int i) {
super(i);
System.out.println("public B");
}
public static void main(final String[] args) {
final B t = new B(10);
try {
final ObjectOutputStream oio = new ObjectOutputStream(System.out);
oio.writeObject(t);
} catch (final IOException e) {
e.printStackTrace();
}
}
}
它做得正确吗?Serialization只会在读取对象时检测到可访问的无参数构造函数的absense,请像这样更改代码
ObjectOutputStream oio = new ObjectOutputStream(new FileOutputStream("1"));
oio.writeObject(t);
oio.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("1"));
ois.readObject();
你会看到
线程“main”java.io.InvalidClassException中的异常:test.B;没有有效的构造函数@Kartic。如果我不显式调用super(I),这将是编译错误