今天在看struts1源代码的时候,发如今ActionForm中首先声明了两个transient类型的protected变量。

之前没有接触过该transient类型,所以就查了查。

transient是java语言的keyword,变量修饰符。假设用它声明一个实例变量。当对象存储时,它的值不须要维持。

在java中一个对象仅仅要实现了Serilizable接口,这个对象就能够被序列化。java的这样的序列化模式为开发人员提供了非常多便利,我们能够不必关系详细序列化的过程,仅仅要这个类实现了Serilizable接口。这个的全部属性和方法都会自己主动序列化。

然而在实际开发过程中,我们经常会遇到这种问题,这个类的有些属性须要序列化,而其它属性不须要被序列化。诚然,你能够让这个类来实现Externalizable接口,这个接口是Serilizable的子接口,可是你必须实现readExternal和writeExternal方法。你能够在这两个方法中实现详细属性的反序列化和序列化操作。然而这就意味着你必须在这两个方法中手工编写额外的代码来进行详细属性的序列化。

这时transient就派上用场了,你仅仅须要实现Serilizable接口,将不须要序列化的属性前加入keywordtransient,序列化对象的时候。这个属性就不会序列化到指定的目的地中。

而在struts源代码中。ActionForm也确实是implement了Serilizable接口。

以下是个小样例。从执行结果上就能够看明确了

public class TestTransient {

public static void main(String[] args) throws FileNotFoundException, IOException, 

ClassNotFoundException {
A a = new A(25,"姓名");
System.out.println(a);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("c://transient.txt"));
oos.writeObject(a);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("c://transient.txt"));
a = (A)ois.readObject();
System.out.println(a); } } class A implements Serializable{
int a;
transient String b;
public A(int a,String b){
this.a = a;
this.b = b;
}
public String toString(){
return "a = "+a+",b = "+b;
}
}

执行结果例如以下:

a = 25,b = 姓名

a = 25,b = null

在上面的样例中,我将属性b前加入keywordtransient,我们看到尽管我们序列化的对象a的属性值为“张三”,可是当我们反序列化之后发现这个属性为空。说明这个属性没有进行序列化。

java基础——transient的更多相关文章

  1. 【Java基础】transient关键字

    1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过 ...

  2. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  3. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  4. Java基础常见英语词汇

    Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的                             ['prəʊɡræmɪŋ]编程 OO: object ...

  5. java 基础题 很基础, 很有趣

    都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底, 老手们就不用进来了,免得笑话我们这些未出校门的孩纸们, ...

  6. 【Java基础】序列化与反序列化深入分析

    一.前言 复习Java基础知识点的序列化与反序列化过程,整理了如下学习笔记. 二.为什么需要序列化与反序列化 程序运行时,只要需要,对象可以一直存在,并且我们可以随时访问对象的一些状态信息,如果程序终 ...

  7. 经典的Java基础面试题集锦

    经典的Java基础面试题集锦,欢迎收藏和分享. 问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”. 问题:Java里的传引用 ...

  8. JAVA基础知识(转)

    本文就java基础部分容易混淆的一些知识点进行了一下总结.因为Java本身知识点非常多,不可能在很短的篇幅就能叙述完,而且就某一个点来讲,如欲仔细去探究,也能阐述的非常多.这里不做全面仔细的论述,仅做 ...

  9. 学习android学习必备的java基础知识--四大内部类

    学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...

随机推荐

  1. [JavaEE] Spring学习资源链接

    学习规划 http://forrest-lv.iteye.com/blog/1166947 SpringMVC - 框架配置 http://blog.csdn.net/ljhabc1982/artic ...

  2. ffmpeg实现

    最近做一个小项目,要在线播放录制的 MP4 视频,想开源的 flash player 或 html 5 可以播放.可,虽然 MP4 是 H.264 编码,但就是播放不了.可能是封装方式(PS 方式)不 ...

  3. Netty简单介绍(非原创)

    文章大纲 一.Netty基础介绍二.Netty代码实战三.项目源码下载四.参考文章   一.Netty基础介绍 1. 简介 官方定义为:”Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地 ...

  4. ORA-03137 - ORA-12592 TNS:BAD PACKET OR ORA-3137 故障处理

    环境 操作系统:CentOS release 6.8 数据库:oracle 11.2.0.4.190115 说明:数据库psu 为19年1月份的补丁,可不间断运行,但是开发提示在执行一些批处理的时候, ...

  5. Android之MVP架构

    MVP(Model View Presenter)模式是由MVC模式发展而来的,在如今的Android程序开发中显得越来越重要.本篇文章简单讨论了MVP模式的思想. 啥是MVP MVP模式的主要思想是 ...

  6. 状态模式(state)C++实现

    状态模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类 ...

  7. 2.Ventuz Designer常用工具介绍

    Ventuz Designer常用工具介绍 1.  打开Ventuz Designer 图1.1 2.  Ventuz Designer第一个界面 图2.1 Recent Projects:最近创建的 ...

  8. axis2服务器搭建

    一. axis2服务器搭建 简单起见, axis2r搭建采用较为简单的一种方式, 即将服务类和services.xml打成.aar包发布. 1. 下载部署axis2 http://axis.apach ...

  9. DP:***24种设计模式--转自刘伟

    转自于高人的文章:http://blog.csdn.net/lovelion/article/details/17517213 2012年-2013年,Sunny在CSDN技术博客中陆续发表了100多 ...

  10. Surrogate data 代理数据

    附一篇science论文,待啃: 附Surrogate time series and fields,matlab:https://www.sogou.com/link?url=DSOYnZeCC_p ...