Java中的transient关键字

来源:互联网 发布:openstak网络架构 编辑:程序博客网 时间:2024/06/09 04:32

Java中的transient关键字用于声明当需要持久化变量时,有transient关键字修饰的变量无需持久化。如当需要序列化一个java对象时,该对象中的有transient修饰的field无需持久化,如下述代码所示:

public class TransientTest implements Serializable {    private static final long serialVersionUID = -6317993139178374949L;    private String username;    private transient String passwd;    public TransientTest(){        username= Thread.currentThread().getName();        passwd ="123456";    }    public String toString(){        if(passwd == null){             passwd ="not set";        }        return new String("UserName: " + username +"; Passwd: " +passwd);    }    public static void main(String[] args) {        try {            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("logFile.txt"));            TransientTest transientObj =new TransientTest();            System.out.println(transientObj);            oos.writeObject(transientObj);            oos.close();            ObjectInputStream ois =new ObjectInputStream(new FileInputStream("logFile.txt"));            transientObj = (TransientTest) ois.readObject();            System.out.println(transientObj);        } catch (Exception e) {            e.printStackTrace();        }    }}

上述代码的运行结果为:

UserName: main; Passwd: 123456

UserName: main; Passwd: not set

所以,Passwd并没有被持久化,而且当从磁盘中读取TransientTest类的实例时,并没有调用该类的默认构造器,而是直接将磁盘中的内容填充到该类实例中

原创粉丝点击