通常transient 和Serializable一起使用的
Serializable是序列化的标识 如果在实现了Serializable的类中不希望实例化某个变量可用transient修饰符来修饰,JVM在执行到transient关键字时不会将其序列化。
- 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
- transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
- 被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化
import java.io.*;
public class SerializablePojoTest {
public static void main(String[] args) {
User user = new User();
user.setName("liao");
user.setPassword("123456");
user.setAge("20");
System.out.println(user.getName());
System.out.println(user.getPassword());
System.out.println(user.getAge());
System.out.println("----------");
try{
//序列化
FileOutputStream fos = new FileOutputStream("user.org");
ObjectOutputStream outputStream = new ObjectOutputStream(fos);
outputStream.writeObject(user);
outputStream.flush();
outputStream.close();
user.setAge("18");
user.setName("maliao");
//反序列化
FileInputStream fis = new FileInputStream("user.org");
ObjectInputStream ois = new ObjectInputStream(fis);
user = (User) ois.readObject();
System.out.println(user.getName());
System.out.println(user.getPassword());
System.out.println(user.getAge());
}catch (Exception e){
e.printStackTrace();
}
}
}
class User implements Serializable {
private String name;
private transient String password;
public static String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public static String getAge() {
return age;
}
public static void setAge(String age) {
User.age = age;
}
}
执行结果
liao
123456
20
----------
liao
null
18
Process finished with exit code 0