关键字transient的作用,和详细用法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关键字transient的作用,和详细用法?相关的知识,希望对你有一定的参考价值。
序列化时用的,比如user类 有username,password,序列化时不想password被序列化就在前面加上transient关键字,这样密码就不会被序列化。 参考技术A 1、作用:在对象序列化的时候,有些变量不需要序列化,比如密码等,可以使用transient关键字来解决这个问题,transient修饰的变量不会被序列化。2、用法:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
//Serializable接口没有任何需要实现的方法,实现这个接口是为了声明这个对象可以序列化
public class TransientDemo implements Serializable
private static final long serialVersionUID = 1L;
String name;
//用了transient这个关键字,这个字段就不会被序列化了
transient String password;
public TransientDemo(String name, String password)
this.name = name;
this.password = password;
@Override
public String toString()
return name + ":" + password;
public static void main(String[] args)
TransientDemo td = new TransientDemo("Yinyan", "love");
try
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("log.txt"));
oos.writeObject(td);
oos.close();
catch(Exception e)
e.printStackTrace();
try
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("log.txt"));
TransientDemo td2 = (TransientDemo) ois.readObject();
System.out.println(td2);
catch(Exception e)
e.printStackTrace();
输出结果为:
这段代码创建了一个对象,然后序列化这个对象,保存到log.txt这个文件中,在从log.txt这个文件读取出对象。我们发现name字段内容正常,password字段却为空。这是因为,保底保存密码风险很大,所以我们把password字段定义为不需要序列化。
另外需要说明一点,如果类实现的是Externalizable这个接口,在writeExternal方法内部手动序列化password字段的话,transient 这个关键字是不会起作用的。
transient在java中的作用
java 的transient关键字的作用是需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
transient使用小结
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
以上是关于关键字transient的作用,和详细用法?的主要内容,如果未能解决你的问题,请参考以下文章