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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值