📜  Java transient关键字

📅  最后修改于: 2020-09-27 08:21:33             🧑  作者: Mango

Java瞬态关键字

Java瞬态关键字在序列化中使用。如果将任何数据成员定义为瞬态,则不会序列化它。

让我们举个例子,我已经将一个类声明为Student,它具有三个数据成员ID,名称和年龄。如果序列化对象,则所有值都将被序列化,但是我不想序列化一个值,例如age,那么我们可以将age数据成员声明为瞬态。

Java瞬态关键字示例

在此示例中,我们创建了两个类Student和PersistExample。 Student类的age数据成员被声明为瞬态的,其值将不会序列化。

如果反序列化对象,则将获得瞬态变量的默认值。

让我们创建一个带有瞬态变量的类。

import java.io.Serializable;
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;
 }
}

现在编写代码以序列化对象。

import java.io.*;
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

现在编写反序列化代码。

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。