`
qtlkw
  • 浏览: 299815 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java序列化几点注意事项

    博客分类:
  • JAVA
阅读更多
静态变量不属于对象,属于类,不能被序列化.还有瞬态的变量也不能被序列化.序列化保存的是对象的状态,而静态变量是类的状态。

1.基本类型的数据可以直接序列化

2.对象要被序列化,它的类必须要实现Serializable接口;如果一个类中有引用类型的实例变量,这个引用类型也要实现Serializable接口。

3.可以用这个代码:ObjectOutputStream out  = new ObjectOutputStream(new FileOutputStream("seria"));
但是不能用这个代码:ObjectOutputStream out  = new ObjectOutputStream(new FileOutputStream("seria",true));

4.如果对象的引用类型没有实现序列化,但是还是想将这个对象序列化,那么可以将对象中用到的那个引用类型对象设置为transient类型。
(如果A包含了对B的引用,那么在序列化A的时候也会将B一并地序列化;如果此时A可以序列化,B无法序列化,那么在序列化A的时候就会发生异常,这时就需要将对B的引用设为transient,该关键字表示变量不会被序列化。)
注: transient是java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。

5.如果用transient修饰引用类型对象,则这个引用类型的对象不会保存,那么如果希望保存下来又如何实现呢?

6.如果一个类没有实现Serializable接口,但是它的父类实现了,那么这个类也可以序列化.

7.如果一个类实现了Serializable接口,但是它的父类没有实现,那么这个类可以进行序列化吗?
答案是可以的,因为超类Object类没有实现Serializable接口,所以你懂了吧,但是会有个问题,你需要在父类中是实现默认的构造方法,否则会报异常:no validconstructor。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics