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。