慕丝7291255
在理解transient关键字,必须理解序列化的概念。如果读者知道序列化,请跳过第一点。什么是序列化?序列化是使对象的状态持久的过程。这意味着将对象的状态转换为用于持久化(例如在文件中存储字节)或传输(例如通过网络发送字节)的字节流。同样,我们可以使用反序列化从字节中返回对象的状态。这是Java编程中的一个重要概念,因为序列化主要用于网络编程。需要通过网络传输的对象必须转换为字节。为此,每个类或接口必须实现Serializable接口。它是一个没有任何方法的标记接口。现在是什么transient关键词及其用途?默认情况下,所有对象的变量都转换为持久状态。在某些情况下,您可能希望避免持久化某些变量,因为您不需要持久化这些变量。所以您可以将这些变量声明为transient..如果变量声明为transient,那么它就不会持久了。这是transient关键词。我想用以下例子解释上述两点:package javabeat.samples;import java.io.FileInputStream;import java.io.FileOutputStream;
import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;
import java.io.Serializable;class NameStore implements Serializable{
private String firstName;
private transient String middleName;
private String lastName;
public NameStore (String fName, String mName, String lName){
this.firstName = fName;
this.middleName = mName;
this.lastName = lName;
}
public String toString(){
StringBuffer sb = new StringBuffer(40);
sb.append("First Name : ");
sb.append(this.firstName);
sb.append("Middle Name : ");
sb.append(this.middleName);
sb.append("Last Name : ");
sb.append(this.lastName);
return sb.toString();
}}public class TransientExample{
public static void main(String args[]) throws Exception {
NameStore nameStore = new NameStore("Steve", "Middle","Jobs");
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("nameStore"));
// writing to object
o.writeObject(nameStore);
o.close();
// reading from object
ObjectInputStream in = new ObjectInputStream(new FileInputStream("nameStore"));
NameStore nameStore1 = (NameStore)in.readObject();
System.out.println(nameStore1);
}}产出如下:First Name : Steve
Middle Name : null
Last Name : Jobs中间名被宣布为transient,所以它不会存储在持久存储中。来源