下面是我的示例代码:

public class Hybrid {
public static void main(String[] args) {
    Cultivate cultivate1 = new Cultivate();
    try{
        ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("myfile"));
        os.writeObject(cultivate1);
        os.close();

        System.out.println("line 1 : "+ ++cultivate1.z+" ");

        ObjectInputStream is = new ObjectInputStream(new FileInputStream("myfile"));
        Cultivate cultivate2 = (Cultivate)is.readObject();
        is.close();

        System.out.println("line 2 : "+cultivate1.y+" "+cultivate2.z);

    } catch(Exception x){
        System.out.println("exc");
    }
}
}
class Cultivate implements Serializable{
    transient int y=3;
    static int z = 6;
}


这是输出:

line 1 : 7
line 2 : 3 7


有人可以解释为什么cultur2.z打印出7吗?
关闭输出流后,ccult1.z的值将增加。那么,这种修改如何反映在反序列化上?

最佳答案

静态变量未序列化,因此在反序列化期间,将从类中加载静态变量值(将加载当前值)。

这里是来自ObjectOutputStream的JavaDoc:


  对象的默认序列化机制将写入对象的类,类签名以及所有非瞬态和非静态字段的值。对其他对象的引用(在瞬态或静态字段中除外)会使这些对象也被写入。使用引用共享机制对单个对象的多个引用进行编码,以便可以将对象的图恢复为与编写原始图时相同的形状。

07-24 09:37
查看更多