温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

静态变量会被序列化

发布时间:2026-10-05 02:34:24 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

简短结论:静态变量(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 值


常见误区

  • 误以为 static 会被保存:其实只是反序列化时“刚好”读到了当前类的 static 值
  • 多个 JVM / 重启后:static 值会丢失或重置

补充

如果你想要类似“全局状态”参与序列化,正确做法是:

  • 用实例变量代替
  • 或手动在 writeObject / readObject 中处理(不推荐)

如果你问的是 其他语言(如 C#、Python) 或 某种框架(如 Redis、JSON),可以告诉我,我可以针对性说明。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手