ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java中的transient关键字

2022-08-25 19:31:56  阅读:143  来源: 互联网

标签: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
来源: https://www.cnblogs.com/xiaocer/p/16625454.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有