为什么我没有 NotSerializableException?

Why I don't have there NotSerializableException?

为什么我没有 NotSerializableException 因为 class A 是序列化的 我有 private B b 没有序列化 我知道如果 class 实现 Serializable 所有复合 classes 也必须实现 Serializable/Externalizable

import java.io.*;

public class Test
{
    public static void main(String[] args) throws IOException
    {
        FileOutputStream fileOutput = new FileOutputStream("a.dat");
        ObjectOutputStream outputStream = new ObjectOutputStream(fileOutput);
        outputStream.writeObject(new A());
        fileOutput.close();
        outputStream.close();
    }
}

class A implements Serializable
{
    private int age;
    private B b;
}

class B
{

}

当您序列化 new A() 时,bnull,所以没有 B

重要的是运行时类型 - 例如,您可以 class BDerived extends B implements java.ui.Serializable。或者 ArrayList 可以从 List 字段引用序列化。

如果您使用非null、不可序列化的类型初始化b,您会看到异常。例如

    private B b = new B();