Java内部类序列化

版权声明:本文为博主原创文章,未经允许不得转载。 https://blog.csdn.net/qq_31142553/article/details/85281325

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

  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对象序列化要求对象里所有的对象成员都必须实现序列化接口。

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

猜你喜欢

转载自blog.csdn.net/qq_31142553/article/details/85281325