昨天一个好朋友和我打电话说,他接到一个著名公司的面试通知,然后他很欣喜的去了,因为他深入j2ee开发很多年,对于各种框架的应用十分的熟练,就是那种明天上班马上就能上手工作的那种人,公司的面试题很简单,却给他出了一个简单的难题:
题:假设某个Login对象保存某个特定的登录会话信息,登录的合法性通过校验以后,我们想把数据保存下来,但是不保存密码,为了做到这一点公司的技术人员实现的Serializable接口,这是为什么呢?下面给出了代码,但是代码中缺少一些语句,请你给添加上。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
public class Login implements Serializable {
private Date date = new Date();
private String username;
private transient String password;
public Login(String name, String pwd) {
username = name;
password = pwd;
}
public String toString() {
String pwd = (password == null) ? "(n/a)" : password;
return "Login info:/n username:" + username + "/n date:" + date
+ "/n password:" + pwd;
}
public static void main(String[] args) throws Exception{
Login a=new Login("tianyi","easyjf");
System.out.println("Login a="+a);
ObjectOutputStream o=new ObjectOutputStream(new FileOutputStream("Login.out"));
o.writeObject(a);
o.close();
Thread.sleep(1000);
ObjectInputStream in=new ObjectInputStream(new FileInputStream("Login.out"));
System.out.println("Recovering object at"+new Date());
a=(Login)in.readObject();
System.out.println("Login a="+a);
}}
,
这个题目就是对
java
基础的考察,不了解这个序列化接口的人们肯定解决不了这个问题,序列化接口大家都知道,他什么方法都没有,但是实现序列化接口的类,它包含
transient
关键字,只要实现这个关键字就能很好的控制字段,他可以逐个关闭序列化,用
Bruce Eckel
的话说“不用麻烦你保存或者恢复数据
-------
我自己会处理的!”,这个题目就是考察这个简单的东西了,只要在
password
前面加上关键字
transient
就可以解决这个问题了!