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