transient关键字详解
作用
1,一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2,transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3,一个静态变量不管是否被transient修饰,均不能被序列化。
请看代码
//实体类(必须实现Serializable接口,才能被序列化)
public class Resume implements Cloneable,Serializable{
private static final long serialVersionUID = 1L; private String name;
private static String sex;
transient private String age;
private WorkExperience workExperience; public WorkExperience getWorkExperience() {
return workExperience;
} public void setWorkExperience(WorkExperience workExperience) {
this.workExperience = workExperience;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public void dispaly(){
System.out.println("姓名:"+name+"\t年龄:"+age+"\t性别:"+sex);
// System.out.println("工作经历:"+workExperience.getWorkDate()+"\t"+workExperience.getCompany());
} public Object clone(){
try {
Resume resume = (Resume)super.clone();
return resume;
}catch (Exception e){
return null;
} } } public class MainTest2 {
public static void main(String[] args){ try {
// 序列化Resume
Resume resume = new Resume();
resume.setName("哈哈");
resume.setSex("男");
resume.setAge("20");
resume.dispaly();
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("D:\\resume.txt"));
outputStream.writeObject(resume);
outputStream.close();
}catch (Exception e){
e.printStackTrace();
} }
}
//输出结果
姓名:哈哈 年龄:20 性别:男
反序列化
public class MainTest2 {
public static void main(String[] args){
try {
// 序列化Resume
Resume resume = new Resume();
// resume.setName("哈哈");
// resume.setSex("男");
// resume.setAge("20");
// resume.dispaly();
// ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("D:\\resume.txt"));
// outputStream.writeObject(resume);
// outputStream.close();
//改变sex(根据结果可见sex未被序列化,而是直接从内存中读取)
resume.setSex("女");
//反序列化
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("D:\\resume.txt"));
Resume resume1 = (Resume) inputStream.readObject();
resume1.dispaly();
}catch (Exception e){
e.printStackTrace();
}
}
}
//结果
姓名:哈哈 年龄:null 性别:女
根据结果可知age字段被transient修饰未能序列化成功,而sex反序列化之前改变了值,所以标明也未被序列化。
transient关键字详解的更多相关文章
- java中的transient关键字详解
目录 1.何谓序列化? 2.为何要序列化? 3.序列化与transient的使用 4.java类中serialVersionUID作用 5.transient关键字小结 前言 说实话学了一段时间jav ...
- java关键字(详解)
目录 1. 基本类型 1) boolean 布尔型 2) byte 字节型 3) char 字符型 4) double 双精度 5) float 浮点 6) int 整型 7) long 长整型 8) ...
- 【转载】C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...
- python关键字详解
今天依旧在啃:<笨方法学python>,其中习题37是复习各种关键字.我本想百度一下记一下就ok了,但是百度出来第一个就Hongten的博客.我才意识到我也有博客,我应该学习他,把这些积累 ...
- Java面试题04-final关键字详解
Java面试题04-final关键字详解 本篇博客将会讨论java中final关键字的含义,以及final用在什么地方,感觉看书总会有一些模糊,而且解释的不是很清楚,在此做个总结,以备准备面试的时候查 ...
- Objective-C 实用关键字详解1「面试、工作」看我就 🐒 了 ^_^.
在写项目 或 阅读别人的代码(一些优秀的源码)中,总能发现一些常见的关键字,随着编程经验的积累大部分还是知道是什么意思 的. 相信很多开发者跟我当初一样,只是基本的常用关键字定义属性会使用,但在关键字 ...
- java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系
本文关键词: java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系 跳出循环 带标签的continue和break 嵌套循环 深入continue ...
- mysql中文、英文别名排序问题,order by 关键字详解
order by 关键字详解: SELECT intcode AS 商品编码, product_title AS 名称, retailprice AS 零售价, purchaseprice AS ...
- Java多线程(三)—— synchronized关键字详解
一.多线程的同步 1.为什么要引入同步机制 在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源.必须对这种潜在资源冲突进行预防. 解决方法:在线程使用一个资源时为其加锁即可. 访问资 ...
随机推荐
- GAN的文献综述
1.Conditional Generative Adversarial Netwoks Describe GAN: Generative adversarial nets were recently ...
- PIVOT(透视转换)和UNPIVOT(逆透视转换)
一.原数据状态 二.手动写透视转换1 三.手动写透视转换2 四.PIVOT(透视转换)和UNPIVOT(逆透视转换)详细使用 使用标准SQL进行透视转换和逆视转换 --行列转换 create tabl ...
- python 闭包和装饰器
python 闭包和装饰器 一.闭包闭包:外部函数FunOut()里面包含一个内部函数FunIn(),并且外部函数返回内部函数的对象FunIn,内部函数存在对外部函数的变量的引用.那么这个内部函数Fu ...
- [转载]Javascript:history.go()和history.back()的用法和区别
Javascript:history.go()和history.back()的用法和区别 简单的说就是:go(-1): 返回上一页,原页面表单中的内容会丢失:back(): 返回上一页,原页表表单中的 ...
- MVC 部署HTTPS网站
一.项目配置 什么是全站HTTPS 全站HTTPS就是指整个网站的所有页面,所有资源全部使用HTTPS链接.当用户的某个请求是明文的HTTP时,应该通过HTTP状态码301永久重定向到对应的HTTPS ...
- The Little Prince-12/16
The Little Prince-12/16 今天四六级考完了呢,布吉岛大家考的怎么样,会有好多好多奇葩翻译吧,哈哈哈! 突然放出一条16年的笑笑汪~~~今年的也应该会很快出炉了,段子手们准备好!! ...
- java根据图片的url地址下载图片到本地
package com.daojia.haobo.aicircle.util; import sun.misc.BASE64Encoder; import java.io.*; import java ...
- pandas 应用
类似vlookup import pandas as pd file = pd.read_csv('NIN411PF.CSV', encoding='ANSI') a = pd.DataFrame({ ...
- sqlchemy self made
# -*- coding: utf-8 -*- from sqlalchemy import create_engine, Column, String, Integer, ForeignKey, T ...
- python使用super()调用父类的方法
如果要在子类中引用父类的方法,但是又需要添加一些子类所特有的内容,可通过类名.方法()和super()来调用父类的方法,再个性化子类的对应函数. 直接使用类名.方法()来调用时,还是需要传入self为 ...