java序列化:不能产生java docs 1.8中指定的运行时异常

6fe3ivhb  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(322)

我正在尝试获取一些运行时异常来验证 Serializable 接口。上面写着
要允许序列化不可序列化类的子类型,子类型可以负责保存和还原父类型的public、protected和(如果可以访问)包字段的状态。只有当子类型扩展的类具有可访问的no arg构造函数来初始化类的状态时,子类型才可以承担此责任。如果不是这样,则声明类可序列化是错误的。将在运行时检测到错误。
我已经在这里编写了一些代码来测试它,但是没有得到任何异常。

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();
        }
    }
}

它做得对吗?

yfwxisqw

yfwxisqw1#

serialization只会在读取对象时检测到无参数构造函数的取消,这样更改代码

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;没有有效的构造函数

相关问题