为什么我没有 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()
时,b
是 null
,所以没有 B
。
重要的是运行时类型 - 例如,您可以 class BDerived extends B implements java.ui.Serializable
。或者 ArrayList
可以从 List
字段引用序列化。
如果您使用非null
、不可序列化的类型初始化b
,您会看到异常。例如
private B b = new B();
为什么我没有 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()
时,b
是 null
,所以没有 B
。
重要的是运行时类型 - 例如,您可以 class BDerived extends B implements java.ui.Serializable
。或者 ArrayList
可以从 List
字段引用序列化。
如果您使用非null
、不可序列化的类型初始化b
,您会看到异常。例如
private B b = new B();