Java中的transient关键字

在Java序列化过程中,如果您不想序列化类的任何数据成员,则可以将其标记为transient。这意味着在序列化时,该数据成员将被忽略。

为什么要使用transient关键字?

当我们不想序列化对象时,可以使用transient关键字。例如,如果程序接受用户的登录详细信息和密码,但我们不想将原始密码存储在文件中,则可以使用transient关键字。当JVM读取transient关键字时,它会忽略对象的原始值,并存储对象的默认值。

下面是Java transient关键字的语法:

private transient <member variable>;  

或者

transient private <member variable>;  

什么情况下使用transient关键字?

  1. 当类的数据成员派生自同一个类的实例内的其他数据成员时,可以使用transient修饰符。
  2. 这个transient关键字可以与不表示对象状态的数据成员一起使用。
  3. 非序列化对象或类的数据成员也可以使用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,因为年龄的值未序列化。

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想