您的位置:首页 > 编程语言 > Java开发

Java基础-transient关键字

2016-05-27 16:42 651 查看
使用场景:当一个类实现了Serilizable接口,那么这个类的所有属性和方法都可以被序列化。但有时,我们不希望有些属性被序列化,那么我们可以用transient关键字修饰这个属性。

public class User implements Serializable{

private static final long serialVersionUID = 9112505189588127047L;

private String username;
private transient String passwd;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPasswd() {
return passwd;
}

public void setPasswd(String passwd) {
this.passwd = passwd;
}

}


注:

一个静态变量不管是否被transient修饰,均不能被序列化。

transient关键字只能修饰变量,而不能修饰方法和类。

局部变量是不能被transient关键字修饰的。

transient关键字修饰的变量如果是用户自定义类变量,则该类需要实现Serializable接口。

例外情况:

  对象的序列化可以通过实现两种接口来实现:若实现的是Serializable接口,则所有的序列化将会自动进行;若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。

public class ExternalizableTest implements Externalizable {

private transient String content = "闪光灯和规范化";

@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(content);
}

@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
content = (String) in.readObject();
}

public static void main(String[] args) throws Exception {

ExternalizableTest et = new ExternalizableTest();

ObjectOutput out = new ObjectOutputStream(new FileOutputStream(
new File("test.txt")));
out.writeObject(et);              //序列化

ObjectInput in = new ObjectInputStream(new FileInputStream(new File(
"test.txt")));
et = (ExternalizableTest) in.readObject();    //反序列化

System.out.println(et.content);

out.close();
in.close();
}

}


输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: