天天看點

Transient關鍵字詳解

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,沒有被序列化