Java中的transient关键字
2022/8/26 14:24:32
本文主要是介绍Java中的transient关键字,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.transient关键字的作用和使用方法
- transient关键字的作用:一个类实现了Serializable接口,这个类定义的对象就可以序列化和反序列化。不需要序列化的属性加上transient关键字修饰。
- transient关键字只能修饰变量,不能修饰方法和类。
- 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(); } }
- 如何序列化被transient关键字修饰的类变量:实现Externalizable接口.
- 被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(); } }
- final关键字修饰的变量如果不使用transient关键字修饰,也参与序列化
这篇关于Java中的transient关键字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行