Transient, volatile, strictfp

Transient - 声明一个实例变量,当对象存储或序列化时,它的值不需要维持

Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想   
用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。   
transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。

Reference:

http://www.blogjava.net/fhtdy2004/archive/2009/06/20/286112.html

Volatile - 修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变。在多线程程序中,有时两个或更多地线程共享一个相同的实例变量。考虑效率问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在不同的时候更新,比如当进入synchronized方法时。

该变量声明为volatile(不稳定的),这就指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。一般说来,多任务环境下各任务间共享的标志都应该加volatile修饰

Reference: 

http://developer.51cto.com/art/201105/264855.htm

http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html

Strictfp - 确保浮点运算,其意思是FP-strict,也就是说精确浮点的意思。在java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点数的表达式是采取一种近似于我行我素的行为来完成这些操作,以至于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类,借口或者方法时,那么所声明的范围内java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。

-----你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字。

posted @ 2012-05-19 22:58  我是小菜鸟  阅读(220)  评论(0编辑  收藏  举报