温馨提示×

温馨提示×

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

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

静态变量参与java序列化吗

发布时间:2026-09-14 10:42:36 来源:亿速云 阅读:85 作者:小樊 栏目:编程语言

Java 序列化(Serializable) 中,静态变量(static 变量)不会参与序列化

原因

  • 序列化的本质是:把“对象实例”的状态(即对象成员变量的值)写入流中
  • 静态变量属于类(Class),不属于对象实例
  • 序列化只处理对象实例的字段,不处理类级别的字段

因此:

private static int count = 10;

count 不会被序列化,也不会被反序列化恢复


示例说明

import java.io.*;

class Person implements Serializable {
    private String name;
    public static int staticField = 100;

    public Person(String name) {
        this.name = name;
    }
}

序列化 → 反序列化后:

  • name 会被恢复
  • staticField 保持当前 JVM 中类的值,而不是序列化时的值

常见误区

❌ 认为“静态变量会被一起保存”
✅ 实际:反序列化时静态变量的值取决于 类加载时的初始值或运行期修改值


特殊情况

如果你 真的想影响静态变量(不推荐),只能在:

  • readObject()
  • readResolve() 中手动处理(但这已经不是“序列化静态变量”了)

总结一句话

Java 序列化不序列化 static 变量,因为 static 属于类而不属于对象。

如果你愿意,我也可以讲 transientserialVersionUID序列化的最佳实践

向AI问一下细节

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

AI