一个类能够序列化,需要满足两个条件:

  1. ​​​​​​​类本身实现序列化接口Serializable
  2. 类所有的成员属性实现序列化接口Serializable

Java的嵌套类(nested class)一共有四种:

  • static nested class 静态嵌套类
  • inner class 内部类(非静态)
  • local class 本地类(定义在方法内部)
  • anonymous class 匿名类

静态嵌套类的行为更接近普通的类,另外三个是真正的内部类。区别在于作用域的不同。

  以下是对他们的性质描述:

1、首先我们对静态嵌套类(static nested class)进行序列化。同理,也要实现序列化接口Serializable。

成功了,跟预料中一样。

2、然后我们对内部类(inner class)进行序列化。同理,也要实现序列化接口Serializable。

异常了,提示我们外部类没有序列化。那我们就将外部类也实现序列化接口。

成功了,这是为什么呢?

网上查了一些资料,总结如下:

所有的内部类,Local内部类,匿名内部类都可以直接访问外面的封装类的实例变量和方法。而静态嵌套类则不能。

为了实现这一行为,内部类,Local内部类,匿名内部类的实例都持有一个外部封装类实例的隐式引用,而Java对象序列化要求对象里所有的对象成员都必须实现序列化接口。

所以,嵌套类要想能够序列化,除了本身和所有成员属性都要实现序列化接口以外,要么声明为静态嵌套类,要么让外部类也实现序列化接口。

Java内部类序列化相关推荐

  1. java 内部类序列化_Gson如何序列化内部类

    1 Gson处理成员内部类 1.1 编写核心类 MainApp: package com.yiidian.gson; import com.google.gson.Gson; public class ...

  2. Java内部类(Inner Class)小记

    一.引子 看到Trinea的博文Junit单测代码中java序列化失败的解决,让我想到Java内部类的一些小Gocha,初学Java时很迷惑.这里记录一下. 就以Trinea的博文中的序列化失败的例子 ...

  3. 关于 Java 对象序列化您不知道的 5 件事

    数年前,当和一个软件团队一起用 Java 语言编写一个应用程序时,我体会到比一般程序员多知道一点关于 Java 对象序列化的知识所带来的好处. 关于本系列 您觉得自己懂 Java 编程?事实上,大多数 ...

  4. 如何新建java内部类_java内部类-1(内部类的定义)

    小胖从官网出发,研究下为什么我们需要些内部类,内部类的区别和联系. 思考三个问题: (1)为什么需要内部类?静态内部类和非静态内部类有什么区别: (2)为什么内部类可以无条件访问外部类成员: (3)为 ...

  5. 几种Java常用序列化框架的选型与对比

    简介: 序列化与反序列化是我们日常数据持久化和网络传输中经常使用的技术,但是目前各种序列化框架让人眼花缭乱,不清楚什么场景到底采用哪种序列化框架.本文会将业界开源的序列化框架进行对比测试,分别从通用性 ...

  6. java图片序列化_Java中的强大武器——对象的序列化

    原标题:Java中的强大武器--对象的序列化 所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象.这个过程也可以通过网络实现,可以先在Windows机器上创建一个对象, ...

  7. 深入分析Java的序列化与反序列化

    阅读目录 Java对象的序列化 如何对Java对象进行序列化与反序列化 序列化及反序列化相关知识 ArrayList的序列化 ObjectOutputStream 总结 序列化是一种对象持久化的手段. ...

  8. fegin调用为什么要序列化_全方位解析Java的序列化

    前言 相信大家日常开发中,经常看到Java对象"implements Serializable".那么,它到底有什么用呢?本文从以下几个角度来解析序列这一块知识点~ 什么是Java ...

  9. Java 的序列化和反序列化,你该知道得更多

    作者 l 会点代码的大叔(CodeDaShu) Java 在内存中创建可以复用的对象,这些对象的生命周期不会比 JVM 的生命周期更长,如果有一些对象需要在 JVM 停止后保存(硬盘),并在 JVM ...

最新文章

  1. 程序员在翻车时的30种常见反应
  2. 10分钟看懂, Java NIO 底层原理
  3. 【学习笔记】Eureka服务治理代码实例、相关配置和原理机制详解
  4. 10.15 wget:命令行下载工具
  5. Angular 项目里的 tsconfig.json
  6. 科目三电子考的通过率普遍偏低
  7. python语言的三个主要特点_python干货|新总结的4个python语言的特点,这几个细节值得关注...
  8. 让Android软键盘默认进入英文键盘
  9. ActiveXObject文件读写
  10. 朝鲜欲对韩国发起大规模网络攻击 但计划被韩方挫败
  11. 2021年中国船用燃气发动机市场趋势报告、技术动态创新及2027年市场预测
  12. 生日祝福html_更新,礼包选择,头像框及太子生日金币活动
  13. Java_基础—List集合存储学生对象并遍历
  14. 【大数据之路-阿里巴巴大数据实践】第一篇 数据技术篇
  15. 软件界面设计思想方法
  16. 服务器CPU概念总结
  17. 每日一题(二三)function Foo(){ Foo.a = function(){console.log(1); } this.a = function(){console.log(2)}) Fo
  18. WHU 1572 Cyy and Fzz(AC自动机+dp)
  19. 华为OD机试 - 跳格子游戏
  20. Android 音视频变速原理

热门文章

  1. java重要基础知识汇总
  2. ESMM、MMOE-推荐系统小结
  3. 活动公告|万圣节惊喜派对~
  4. 第十一章 国民收入的决定:IS-LM模型
  5. 一级市场丨Coinlist打新系列-Axelar(AXL)代币经济学概述
  6. HTML中h标签和p标签,HTML 中 br 和 p 标签的区别是什么?
  7. 魔兽世界服务器状态 排队人数,魔兽世界怀旧服开服 服务器拥挤 排队人数上万...
  8. Activity 页面跳转,打招呼
  9. eda技术试卷_《EDA技术》期末试卷(A)参考答案与评分标准.doc
  10. 数据结构——关于图的小结