简短结论:静态变量(static 变量)不会被序列化。
在 Java 中,序列化(Serializable)是针对对象的状态进行的,也就是实例变量(非 static、非 transient)。
而 static 变量属于类,不属于任何一个对象实例,它存储在方法区(元空间),不随对象一起被序列化。
import java.io.*;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name; // 会被序列化
public static int count; // 不会序列化
public Person(String name) {
this.name = name;
count++;
}
}
序列化 & 反序列化:
// 序列化
Person p1 = new Person("Alice");
Person.count = 10;
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("person.txt"));
oos.writeObject(p1);
oos.close();
// 反序列化
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("person.txt"));
Person p2 = (Person) ois.readObject();
ois.close();
System.out.println(p2.name); // Alice
System.out.println(Person.count); // 仍然是 10(来自当前 JVM,不是序列化来的)
✅ name 被恢复
❌ count 不是从文件恢复的,而是当前 JVM 中的 static 值
如果你想要类似“全局状态”参与序列化,正确做法是:
writeObject / readObject 中处理(不推荐)如果你问的是 其他语言(如 C#、Python) 或 某种框架(如 Redis、JSON),可以告诉我,我可以针对性说明。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。