Transient關鍵字描述
Transient關鍵字用于序列化操作中對不需要序列化字段的修飾,在序列化操作中,static和transient修飾的關鍵字不能夠被序列化,因為static關鍵字修飾的成員變量為靜态變量,靜态内容屬于類,不屬于對象;
Transient關鍵字實作案例:
首先建立一個實作serializable接口的Person類:
class Person implements Serializable{
public String name;
public String address;
public transient int age;
public Person(String name, String address, int age){
this.name = name;
this.address = address;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", age=" + age +
'}';
}
}
測試transient關鍵字修飾的變量是否有值:
public class TransientTest {
public static void main(String[] args) {
try{
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:\\object.txt"));
Person person = new Person("馬潤佳","河南南陽",24);
objectOutputStream.writeObject(person);
objectOutputStream.flush();
objectOutputStream.close();
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("D:\\object.txt"));
Person person1 = (Person) objectInputStream.readObject();
System.out.println(person1.toString());
}catch(IOException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}
輸出結果:
Person{name='馬潤佳', address='河南南陽', age=0}
從上面我們可以看出,age屬性被關鍵字transient修飾,在反序列化之後得到的值為0,沒有被序列化