看源码的时候,发现transient这个关键字,不甚理解,查找资料发现:不被序列化

疑问:

  • 静态变量是不是不被序列化?
public class User implements Serializable {

	private static final long serialVersionUID = 2877054094045568710L;

	private String username;

	private transient String password;

	private static int age;

	public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public int getAge() {
return age;
} public void setAge(int age) {
User.age = age;
} public static void main(String[] args) {
User user = new User();
user.setUsername("imeng");
user.setPassword("123456");
user.setAge(22); try {
ObjectOutputStream os = new ObjectOutputStream(
new FileOutputStream("/Users/imeng/Desktop/user.txt"));
os.writeObject(user);
os.close();
} catch (IOException e) {
e.printStackTrace();
} //序列号后改变Static的值
user.setAge(100); ObjectInputStream oi;
try {
oi = new ObjectInputStream(new FileInputStream("/Users/imeng/Desktop/user.txt"));
User readUser = (User) oi.readObject();
System.out.println("username:" + readUser.getUsername());
System.out.println("transient关键字password:" + readUser.getPassword());
System.out.println("静态变量age:" + readUser.getAge());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
username:imeng
password:null
age:100

结论:

  • transient关键字可以阻止序列化
  • 序列号并不保存静态变量

干了这杯Java之transient关键字的更多相关文章

  1. Java 序列化 transient关键字

    Java 序列化 transient关键字 @author 敏敏Alexia 转自:http://www.cnblogs.com/lanxuezaipiao/p/3369962.html 1. tra ...

  2. Java的transient关键字

    Java的transient关键字   Java 中的 transient 关键字被用来表示变量将不被序列化处理.那么在理解 transient 关键字之前,我们先了解下什么是序列化. 什么是序列化 ...

  3. java中transient关键字的作用

    Java有个特点就是序列化,简单地来说就是可以将这个类存储在物理空间(当然还是以文件的形式存在),那么当你从本地还原这个文件时,你可以将它转换为它本身.这可以极大地方便网络上的一些操作,但同时,因为涉 ...

  4. Java Volatile transient 关键字

    随笔-204  评论-134  文章-0  trackbacks-0   Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变 ...

  5. Java的transient关键字(转)

    Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一 ...

  6. 干了这杯Java之LinkedList

    LinkedList和ArrayList一样实现了List接口 ArrayList内部为数组 LinkedList内外为双向链表 实现了Deque接口,双端列队的实现 图片来自Wiki 内部实现为No ...

  7. 干了这杯Java之Vector

    Vector实现了AbstractList抽象类和List接口,和ArrayList一样是基于Array存储的 Vector 是线程安全的,在大多数方法上存在synchronized关键字 //Vec ...

  8. 干了这杯java之ThreadLocal

    ThreadLocal Java篇 是什么 怎么用 源码 缺点 总结 是什么 ThreadLocal是一个关于创建线程局部变量的类,这个变量只能当前线程使用,其他线程不可用. ThreadLocal提 ...

  9. 干了这杯Java之集合概览

    Java集合框架支持两种类型容器: 一种是为了存储一个元素的合集,为Collection 一种是为了存储键/值对,为Mapping Collection包含 Set存储不重复的元素 List存储一个有 ...

随机推荐

  1. 文本处理三剑客之awk(No.1)

    示例1:只查看test.txt文件内的第3到第7行的内容 awk '{if(NR>=3 && NR<=7) print $0}' test.txt #其中的$0是输出整个行 ...

  2. ubuntu linux adb devices no permissions解决办法

    最近在调试安卓手机时老是失败,问题如下所示 han@ubuntu:~/project/zero_app$ adb devices List of devices attached 664768297c ...

  3. getOrderValue 排序 sql server

    GO -- =============================================-- Author:        <Author,,rx.tang>-- Creat ...

  4. ACA:利用ACA解决TSP优化最佳路径问题——Jason niu

    load citys_data.mat n = size(citys,1); D = zeros(n,n); for i = 1:n for j = 1:n if i ~= j D(i,j) = sq ...

  5. webpack打包后该如何访问项目?

    一.问题描述 开发环境,页面浏览都OK,产出文件后,直接打开产出目录的index.html,页面空白. 二.预期结果 能正常看到页面. 三.问题分析 你可能会在编译的最后看到如下一句话: Tip: b ...

  6. (三)ajax请求不同源之nginx反向代理跨域

    一.基本原理 nginx是一个高性能的web服务器,常用作反向代理服务器.nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上. 用nginx反向代理实现跨域,是最简单的跨域方 ...

  7. Java 获取当前日期的几种方法

    import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import ja ...

  8. Java反射通过getter和setter方法实现类的拷贝

    private User copyFieldValues(User userData, User user) { Field[] fields = user.getClass().getDeclare ...

  9. Java虚拟机一 运行时数据区(栈、堆、方法区等)

    Java虚拟机的内存管理主要分两点:内存分配以及内存回收.· 一.内存分配图: 注: 所占区域的大小与实际的内存大小比例并无直接关系. 解读: 1.如图,分成两种颜色的内存区域,其中蓝色的是线程隔离的 ...

  10. js面向对象关键点

    函数加new 工作流程: (1) 创建一个新对象: => var this = new Object(); (2) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象) : (3) ...