transient关键字,transient名词

  transient关键字,transient名词

  如何解决写爬虫IP受阻的问题?立即使用。

  本教程运行环境:windows7系统,java10版本10,Dell G3电脑。

  (学习视频分享:java教学视频)

  Java的序列化提供了一种持久化对象实例的机制。一个对象持久化的时候,可能会有一个特殊的对象数据成员,我们不想用序列化机制来保存。

  要关闭特定对象的域上的序列化,可以用关键字transient作为域的前缀。

  当对象被序列化时,瞬态变量的值不包括在序列化表示中,而非瞬态变量的值包括在内。

  总之被transient修饰的变量不参与序列化和反序列化。

  接下来用代码来证明。

  创建一个新的学生类来实现Serializable接口,并重写其toString方法来观察结果。

  年龄属性不会被瞬变修改,而姓名属性会被瞬变修改。

  公共类学生实现Serializable {

  私人年龄;

  私有瞬态字符串名称;

  公共学生(){

  }

  public Student(int age,String name) {

  this.age=年龄;

  this.name=name

  }

  @覆盖

  公共字符串toString() {

  返回 Student{ age= age ,name= name \ }

  }

  }然后在TransientTest类中测试它。

  PS:

  为了代码简洁起见,这里的IO操作直接抛出,而不是try catch操作。

  公共类TestTransient {

  公共静态void main(String[] args)引发异常{

  //实例化一个学生对象。

  学生学生=新生(15,葛花);

  System.out.println(学生);

  //将学生对象写入磁盘文件(序列化)

  object output stream OOS=new object output stream(new file output stream( student . txt );

  oos.writeObject(学生);

  OOS . close();

  //从磁盘文件中读取学生对象(反序列化)

  ObjectInputStream ois=new ObjectInputStream(new file inputstream( student . txt );

  student=(学生)ois . read object();

  System.out.println(学生);

  }

  }运行main方法,观察控制台打印信息。

  在发现序列化和反序列化之后,name属性从葛花更改为null。

  这意味着被transient修饰的变量不参与序列化和反序列化。

  那有没有例外呐?

  众所周知,java中有两种序列化方式。

  1.实现可序列化接口。

  2.实现可外部化的接口。

  可外部化接口是可序列化接口的子类。

  源代码如下

  可外部化的公共接口扩展java.io.Serializable {

  void write external(object output out)引发IOException

  void readExternal(ObjectInput in)引发IOException、ClassNotFoundException。

  }这个接口的两个方法可以指定序列化类中的哪些属性。

  使用该接口时,无论属性是否被瞬态修改,

  默认情况下,不序列化任何属性。所以实现可外部化接口的类

  通常,transient不再用于修改属性。

  总结:

  1. 被transient修饰的变量不参与序列化和反序列化

  2. transient一般在实现了Serializable接口的类中使用。

  更多编程知识请访问:编程教学!以上是瞬态关键字的作用是什么的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: