Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java序列化:无法生成Java docs 1.8中指定的运行时异常_Java_Serialization - Fatal编程技术网

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),这将是编译错误