java transient关键字
1、含义
transient 是短暂的意思。用transient关键字修饰的成员变量,在类的实例对象的序列化处理过程中会被忽略,生命对象仅存在于调用者的内存中而不会被写到硬盘里。
示例:
package test1; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; /** * @description: * @author: luguilin * @date: 2023-02-13 13:49 **/ public class TestTransient { public static void main(String[] args) throws IOException, ClassNotFoundException { User user = new User("lisi", 14); System.out.println(user); ObjectOutputStream os = new ObjectOutputStream( new FileOutputStream("user.txt")); os.writeObject(user); os.flush();os.close(); ObjectInputStream is = new ObjectInputStream( new FileInputStream("user.txt")); User u = (User)is.readObject(); is.close(); System.out.println(u); } } class User implements Serializable { private final long serialVersionUID = 1L; private String name; private transient Integer age; public User(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "serialVersionUID=" + serialVersionUID + ", name='" + name + '\'' + ", age=" + age + '}'; } }
使用总结:
(1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法被访问。
(2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
(3)一个静态变量不管是否被transient修饰,均不能被序列化(如果反序列化后类中static变量还有值,则值为当前JVM中对应static变量的值)。序列化保存的是对象状态,静态变量保存的是类状态,因此序列化并不保存静态变量。