首页 > 编程语言 >Java中的transient关键字

Java中的transient关键字

时间:2022-08-25 19:37:15浏览次数:66  
标签:Java object 关键字 transient user new 序列化 User

1.transient关键字的作用和使用方法

  1. transient关键字的作用:一个类实现了Serializable接口,这个类定义的对象就可以序列化和反序列化。不需要序列化的属性加上transient关键字修饰。
  2. transient关键字只能修饰变量,不能修饰方法和类。
  3. transient关键字使用示例:
// 密码信息作为敏感信息,为了安全起见,不需要序列化

// 实现Serializable接口,支持序列化和反序列化
public class User implements Serializable {
    private String userName;
    private transient String password;
    // get,set
}

public class TransientTest {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        User user = new User();
        user.setUserName("root");
        user.setPassword("123456");

        //序列化前:root,123456
        System.out.println("序列化前:" + user.getUserName() + "," + user.getPassword());


        ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("object.txt"));
        // 将对象序列化文件里
        outputStream.writeObject(user);
        outputStream.flush();

        ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("object.txt"));
        // 从流中读取数据
        User object = (User) inputStream.readObject();

        // 序列化后root,null
        System.out.println("序列化后" + object.getUserName() + "," + object.getPassword());
        
        inputStream.close();
        outputStream.close();
    }
}
  1. 如何序列化被transient关键字修饰的类变量:实现Externalizable接口.
  2. 被static修饰的类变量不管是否使用transient关键字修饰,都是不能被序列化的。
//反序列化后类中static型变量的值实际上是当前JVM中对应static
//变量的值,这个值是JVM中的并不是反序列化得出的

public class User implements Serializable {
    private String userName;
    private static String password;
    // set,get
}

public class TransientTest {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        User user = new User();
        user.setUserName("root");
        user.setPassword("123456");

        //序列化前:root,123456
        System.out.println("序列化前:" + user.getUserName() + "," + user.getPassword());


        ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("object.txt"));
        // 将对象序列化文件里
        outputStream.writeObject(user);
        outputStream.flush();

        ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("object.txt"));
        // 测试静态的password属性是否被序列化
        user.setPassword("root");
        // 从流中读取数据
        User object = (User) inputStream.readObject();

        // 序列化后root,root
        System.out.println("序列化后" + object.getUserName() + "," + object.getPassword());

        inputStream.close();
        outputStream.close();
    }
}

  1. final关键字修饰的变量如果不使用transient关键字修饰,也参与序列化

标签:Java,object,关键字,transient,user,new,序列化,User
From: https://www.cnblogs.com/xiaocer/p/16625454.html

相关文章

  • Java枚举简单介绍
    枚举1、枚举简介枚举,是java中的一种比较特殊的class,它继承了java.lang.Enum类,也就是说在枚举类中是不能够继承其他类的。枚举类型可以取代以往常量的定义方式,即将常量封......
  • java实现压缩zip包
    1packagecom.common.util;23importjava.io.File;45importjava.io.FileInputStream;67importjava.io.FileOutputStream;89import......
  • Java Servlet 入门:问题系列:反射方法参数名获取不到问题:arg0,arg1
    问题:获取反射的方法参数名时,得到arg0,arg1,而不是定义的参数名。示例代码:Parameter[]parameters=methodInfo.getParameters();if(parameters!=null&&parame......
  • java下载word文档docx
    原文链接:https://blog.csdn.net/m0_51496483/article/details/122124567普通的下载功能,不过依然有一个值得关注的重要点……请看到最后!***HTML***按钮就不上了,你开心设计......
  • 图文详解 Java 泛型,写得太好了!
    泛型——一种可以接收数据类型的数据类型,本文将通俗讲解Java泛型的优点、方法及相关细节。一、泛型的引入我们都知道,继承是面向对象的三大特性之一,比如在我们向集合中......
  • 静态static关键字概述和修饰成员变量
    静态static关键字概述  静态static关键字修饰成员变量案例:Student7类:privateintid;privateStringname;privateintage;staticStringroom;privatestaticin......
  • 你真的了解java的泛型吗?
    1.java可以声明泛型数组吗?​ 我们都知道在java中声明一个普通数组,但是你知道如何声明一个泛型数组吗?​ 先来看一个简单的例子,Animals是Cat的父类,思考下Animals[]和Cat[......
  • java操作selenium浏览器自动化操作
    seleniumgithubselenium官网各类型浏览器webDriver驱动下载chrome浏览器webDriver驱动下载,注意要与电脑上实际安装的浏览器版本相对应原理说明:java代码直接通过sele......
  • Caused by: java.lang.UnsupportedClassVersionError: com/hfplm/handler/HFEBOMation
    Causedby:java.lang.UnsupportedClassVersionError:com/hfplm/handler/HFEBOMationHandlerhasbeencompiledbyamorerecentversionoftheJavaRuntime(classf......
  • Java 连接 MySQL
    让Java和MySQL连接起来-囧雪诺-博客园 https://www.cnblogs.com/jonsnow/p/6246131.htmlJava连接MySQL需要驱动包,可以下载菜鸟教程提供的 jar包:http://stati......