Java教程-Java中的transient关键字

Java中的transient关键字
在Java序列化过程中,如果您不想序列化类的任何数据成员,则可以将其标记为transient。这意味着在序列化时,该数据成员将被忽略。
为什么要使用transient关键字?
当我们不想序列化对象时,可以使用transient关键字。例如,如果程序接受用户的登录详细信息和密码,但我们不想将原始密码存储在文件中,则可以使用transient关键字。当JVM读取transient关键字时,它会忽略对象的原始值,并存储对象的默认值。
下面是Java transient关键字的语法:
private transient <member variable>;
或者
transient private <member variable>;
什么情况下使用transient关键字?
- 当类的数据成员派生自同一个类的实例内的其他数据成员时,可以使用transient修饰符。
- 这个transient关键字可以与不表示对象状态的数据成员一起使用。
- 非序列化对象或类的数据成员也可以使用transient修饰符。
下面是Java transient关键字的示例:
例如,我们声明了一个Student类,它具有三个数据成员id,name和age。如果您序列化对象,则所有值都将被序列化,但我们不想序列化一个值,例如年龄,则可以将年龄数据成员声明为transient。
在此示例中,我们创建了两个类:Student和PersistExample。 Student类的年龄数据成员被声明为transient,因此其值不会被序列化。
如果您反序列化对象,则将获取瞬态变量的默认值。
下面是带有瞬态变量的类的示例:
PersistExample.java
import java.io.*;
public class Student implements Serializable{
int id;
String name;
transient int age;//Now it will not be serialized
public Student(int id, String name,int age) {
this.id = id;
this.name = name;
this.age=age;
}
}
class PersistExample{
public static void main(String args[])throws Exception{
Student s1 =new Student(211,"ravi",22);//creating object
//writing object into file
FileOutputStream f=new FileOutputStream("f.txt");
ObjectOutputStream out=new ObjectOutputStream(f);
out.writeObject(s1);
out.flush();
out.close();
f.close();
System.out.println("success");
}
}
输出:
success
现在编写反序列化代码。
DePersist.java
import java.io.*;
class DePersist{
public static void main(String args[])throws Exception{
ObjectInputStream in=new ObjectInputStream(new FileInputStream("f.txt"));
Student s=(Student)in.readObject();
System.out.println(s.id+" "+s.name+" "+s.age);
in.close();
}
}
输出:
211 ravi 0
如上所述,打印学生的年龄返回0,因为年龄的值未序列化。