java 静态 序列化_java中静态不能被序列化的疑问

在Java中,静态字段不会被序列化。当使用`ObjectOutputStream`写入对象时,静态变量`country`的值未被保存。在序列化和反序列化过程中,静态字段`country`保持其原始值`"cn"`。因此,先写入再读取时,静态字段`country`的值正确显示为`"cn"`。这个问题涉及到Java序列化机制对静态字段的处理方式。
摘要由CSDN通过智能技术生成

importjava.io.ObjectOutputStream;importjava.io.IOException;importjava.io.FileOutputStream;importjava.io.FileInputStream;importjava.io.ObjectInputStream;classObjectStreamD...

import java.io.ObjectOutputStream;

import java.io.IOException;

import java.io.FileOutputStream;

import java.io.FileInputStream;

import java.io.ObjectInputStream;

class ObjectStreamDemo{

public static void writeObj()throws IOException{

ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("Person.txt"));//创建写入指定 OutputStream 的 ObjectOutputStream。

//此构造方法将序列化流部分写入底层流

oos.writeObject(new Person("zhang",12,"haha"));//将指定的对象写入 ObjectOutputStream

/*

对象的类、类的签名(SerialVersionUID),以及类及其所有父类的非瞬态和非静态字段的值都将被写入

*/

oos.close();

}

public static void readObj()throws IOException,ClassNotFoundException{

ObjectInputStream ois=new ObjectInputStream(new FileInputStream("Person.txt"));//创建从指定 InputStream 读取的 ObjectInputStream。

Person p=(Person)ois.readObject();//将读取流中的一个对象返回,当有多个对象可以采用循环读取

//注意该方法上声明两个异常(IOException,ClassNotFoundException)

System.out.println(p.toString());

}

public static void main(String[] args)throws IOException,ClassNotFoundException{

writeObj();

readObj();

}

}

import java.io.Serializable;

public class Person implements Serializable{

private static final long serialVersionUID=100L;

private String name;

int age;

private static String country="cn";

public Person(String name,int age,String country){

this.name=name;

this.age=age;

this.country=country;//非静态可以访问静态

}

public String toString(){

return name+"..."+age+"..."+country;

}

}

问题就是:结果是 zhang...12...haha

但是如果:

先writeObj(),然后readObj()

结果zhang...12...cn (这个是正确的)

麻烦大神门详细解释下,出现上述情况的原因.

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值