序列化:把内存中的Java对象转成二进制字节流,这样才能存到硬盘或者通过网络发给别的机器。

反序列化:把字节流还原成Java对象。

实现细节:

  • 类必须实现Serializable 接口,是许可证,没有JDK序列化机制不允许序列化
  • 敏感字段比如密码,加个transient 关键字,序列化时自动跳过
  • 显示定义serialVersionUID,相当于给类打个版本戳,防止该了类结构后反序列化旧数据时报错。

示例代码:

public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    
    private String username;
    private transient String password; // 不参与序列化
    private int age;
}

静态变量不参与序列化

序列化存的是对象的状态,静态变量属于类,所以不会被序列化。反序列化后静态变量的值取决于当前JVM这个类的静态变量是什么值,跟序列化时的值没关系