温馨提示×

温馨提示×

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

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

哪些类可序列化

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

在 Java 中,判断“哪些类可序列化”通常可以从 规则 和 常见可序列化类 两个层面来理解。


一、类“可序列化”的基本条件(Java 官方规则)

一个类要可序列化,必须满足:

  1. 实现 java.io.Serializable 接口
    public class User implements Serializable {
        private String name;
    }
    
  2. 所有非 transient / static 的成员变量也必须是可序列化的
    • 基本类型(int、double 等)✔
    • String ✔(已实现 Serializable)
    • 自定义对象 ✔(也必须实现 Serializable)
  3. 父类也要可序列化,或提供无参构造方法
    • 父类可序列化 ✔
    • 父类不可序列化但有无参构造 ✔(父类字段不会被序列化)

二、常见“已经可序列化”的类

1. 基本包装类

  • Integer
  • Long
  • Double
  • Boolean
  • Character
  • Byte
  • Short
  • Float

2. 字符串

  • String ✅

3. 集合类(JDK 提供)

以下都实现了 Serializable:

  • ArrayList
  • LinkedList
  • HashMap
  • HashSet
  • TreeMap
  • TreeSet
  • ConcurrentHashMap

⚠ 注意:集合中存放的对象也必须可序列化

4. 时间相关

  • java.util.Date
  • java.time 中部分类(如 LocalDateTime 在 Java 8+ 可序列化)

5. 异常类

  • Exception
  • RuntimeException
  • 自定义异常(只要实现 Serializable)

三、不能序列化的常见情况

  • 没有实现 Serializable 的类
  • Thread、Socket、InputStream 等系统资源类
  • 用 transient 修饰的字段(不序列化)
  • 静态变量(属于类,不属于对象)

四、示例

✅ 可序列化

public class Student implements Serializable {
    private String name;
    private int age;
    private List<String> courses;
}

❌ 不可序列化

public class Task {
    private Thread thread; // Thread 不可序列化
}

五、补充:Serializable vs Externalizable

  • Serializable:自动序列化
  • Externalizable:手动控制序列化过程(也继承 Serializable)

如果你是指 某个具体框架(如 Spring / Hibernate / Kotlin) 或 某个语言(如 C#、Python),可以告诉我,我可以更有针对性地回答。

向AI问一下细节

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

AI
助
手