Java序列化之四: 进一步思考

1,当需要被序列化的类对象中的一部分成员变量是不可被序列化的,会发生什么情况呢?

   例如下面的的代码

public class Person implements Serializable {

 private static final long serialVersionUID = 2356129180978015792L;
 private String name;
 private int age;
 private Resume resume;

 public Resume getResume() {
  return resume;
 }

 public void setResume(Resume resume) {
  this.resume = resume;
 }

 public Person() {

 }

 public Person(String str, int n) {
  System.out.println("Inside Person's Constructor");
  name = str;
  age = n;
 }

 String getName() {
  return name;
 }

 int getAge() {
  return age;
 }
}


public class Resume {
 private String work;

 public String getWork() {
  return work;
 }

 public void setWork(String work) {
  this.work = work;
 }

 public String getCollege() {
  return college;
 }

 public void setCollege(String college) {
  this.college = college;
 }

 private String college;
}


 public Person(String str, int n) {
  System.out.println("Inside Person's Constructor");
  name = str;
  age = n;
 }

 String getName() {
  return name;
 }

 int getAge() {
  return age;
 }
}


   执行以上的代码可以发现,当Person对象的resume被赋值之后,序列化时
  
   会发生NotSerializableException。单就这一个问题,就带来了很大的复杂性。因为当一个
  
   系统中的类定义很多的时候,很难判断某一个类成员是否是Serilizable的。


2,当JDK版本切换之后,序列化过程会不会出错。

   答案:应该不会出错(未验证)

   参见以下网址
   http://docs.oracle.com/javase/6/docs/platform/serialization/spec/version.html
   http://stackoverflow.com/questions/152757/is-java-object-serialization-   compatible-between-1-5-and-1-6


3,transient关键字

   被transient修饰的成员变量不会被序列化。当实例1中的resume被transient修饰的时候,就不会抛出NotSerializableException。

你可能感兴趣的:(java序列化)