当前位置: 首页 > news >正文

transient关键字

在看java.util.ArrayList这个类的源码时,发现其中有个成员变量Object[] elementData 被transient修饰了。突然脑袋回忆不起这个关键字的具体用法了,只知道被此关键字修饰的成员变量不会被序列化。于是我查阅了一下资料。

  当一个类实现了Serializable接口后,那么他就是可被序列化的。一个继承了可序列化类的类本身也是可别序列化的。(源码描述:

  Serializability of a class is enabled by the class implementing the java.io.Serializable interface. All subtypes of a serializable class are themselves serializable.

) 

  在一个可被序列化的类中:

  1.transient只能修饰成员变量/类变量,被它修饰的成员变量将不能被序列化(类变量无论是否被transient修饰都无法被序列化)

  2.如果成员变量是自定义对象类型,那么也必须是可序列化的。如果不是,则可以通过transient修饰,否则会报java.io.NotSerializableException异常。

 测试: 

 1 package com.test;
 2 import java.io.*;
 3 public class TestTransient {
 4 
 5     public static void main(String[] args) throws IOException, ClassNotFoundException {
 6         User user = new User();
 7         user.setPassword("password");
 8         user.setUsername("jery");
 9         person p = new person();
10         p.setName("tom");
11         p.setAge(12);
12         user.setPerson(p);
13 
14         ByteArrayOutputStream bos = new ByteArrayOutputStream();
15         ObjectOutputStream os = new ObjectOutputStream(bos);
16         os.writeObject(user);
17         // user.setUsername("yiiiy"); 测试username被static修饰后,是否会被序列化
18         byte[] bytes = bos.toByteArray();
19         ObjectInputStream is = new ObjectInputStream(new ByteArrayInputStream(bytes));
20         User u = (User) is.readObject();
21         System.out.println(u);
22     }
23 }
24 
25 class User implements Serializable{
26     private String username;
27     private String password;
28     transient person person;
29 
30     public com.common.util.person getPerson() {
31         return person;
32     }
33 
34     public void setPerson(com.common.util.person person) {
35         this.person = person;
36     }
37 
38     public String getUsername() {
39         return username;
40     }
41 
42     public void setUsername(String username) {
43         this.username = username;
44     }
45 
46     public String getPassword() {
47         return password;
48     }
49 
50     public void setPassword(String password) {
51         this.password = password;
52     }
53 
54     @Override
55     public String toString() {
56         return "User{" +
57                 "username='" + username + '\'' +
58                 ", password='" + password + '\'' +
59                 ", person=" + person +
60                 '}';
61     }
62 }
63 
64 class person{
65     private String name;
66     private Integer age;
67 
68     public String getName() {
69         return name;
70     }
71 
72     public void setName(String name) {
73         this.name = name;
74     }
75 
76     public Integer getAge() {
77         return age;
78     }
79 
80     @Override
81     public String toString() {
82         return "person{" +
83                 "name='" + name + '\'' +
84                 ", age=" + age +
85                 '}';
86     }
87 
88     public void setAge(Integer age) {
89         this.age = age;
90     }
91 }

 

转载于:https://www.cnblogs.com/tljava/p/8016672.html

相关文章:

  • [codeforces] 25E Test || hash
  • python入门----hello world
  • HDU2019数列有序!
  • Kafka无消息丢失配置
  • 人体的数学美思考
  • winfrom 水晶报表制作
  • 洛谷 P1454 圣诞夜的极光
  • 关于手势处理
  • ASP.NET Web API 使用Swagger生成在线帮助测试文档,支持多个GET
  • Centos运行Mysql因为内存不足进程被杀
  • BZOJ3529 [Sdoi2014]数表 【莫比乌斯反演】
  • JS 详解 Cookie、 LocalStorage 与 SessionStorage
  • 进程和线程(5)-分布式进程
  • LeetCode-13-roman-to-integer
  • 荣品i.mx6q飞思卡尔工业级核心板开发板高稳定性
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • AngularJS指令开发(1)——参数详解
  • CSS实用技巧
  • eclipse的离线汉化
  • gulp 教程
  • Intervention/image 图片处理扩展包的安装和使用
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • nginx 配置多 域名 + 多 https
  • webpack4 一点通
  • 今年的LC3大会没了?
  • 经典排序算法及其 Java 实现
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 我是如何设计 Upload 上传组件的
  • Java性能优化之JVM GC(垃圾回收机制)
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​io --- 处理流的核心工具​
  • #{}和${}的区别是什么 -- java面试
  • #pragma once
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (1)SpringCloud 整合Python
  • (2015)JS ES6 必知的十个 特性
  • (6)STL算法之转换
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (黑马C++)L06 重载与继承
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • .htaccess配置重写url引擎
  • .Net Core 中间件验签
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET/C# 使用反射注册事件