Java关键字:transient,strictfp和volatile简介

关键字:transient

使用对象:字段

介绍:transient说明一个属性是临时的,不会被序列化。

当对象进行序列化(Serializable)过程时候,有一些属性的状态是瞬时的,这样的对象是无法保存其状态的(例如一个Thread对象,或一个FileInputStream对象),对于这些字段,我们必须用transient关键字标明。

将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

关键字:volatile

使用对象:字段

介绍:volatile让变量每次在使用的时候,都从主存中取。而不是从各个线程的“工作内存”。

(用在多线程,同步变量。 线程为了提高效率,可能会将将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步。因此存在A和B不一致的情况。volatile就是用来避免这种情况的。volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的。)

volatile具有synchronized关键字的“可见性”,但是没有synchronized关键字的“并发正确性”,也就是说不保证线程执行的有序性。

(也就是说,volatile变量对于每次使用,线程都能得到当前volatile变量的最新值。但是volatile变量并不保证并发的正确性。)

关键字:strictfp

使用对象:字段,类

介绍:自Java2以来,Java语言增加了一个关键字strictfp,虽然这个关键字在大多数场合比较少用,但是还是有必要了解一下。

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

你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,例如下面的代码:

1. 合法的使用关键字strictfp:

strictfp interface A {}

public strictfp class FpDemo1 {      strictfp void f() {} }

2. 错误的使用方法:

interface A {      strictfp void f(); }

public class FpDemo2 {      strictfp FpDemo2() {} }

一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。

时间: 2024-10-02 11:21:16

Java关键字:transient,strictfp和volatile简介的相关文章

Java关键字transient和volatile小结(转)

Java关键字transient和volatile小结(转) transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下. transient transient是类型修饰符,只能用来修饰字段.在对象序列化的过程中,标记为transient的变量不会被序列化. 示例: class Test { transient int a; // 不会被持久化 int b; // 持久化 } 当类Test的实例对象被序列化(比如将Test类的

java关键字——transient

transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分.当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的.这样对象的size就会小一些,相对占用的网络资源就会小.java关键字--transient

java 关键字 transient

一个对象实现了Serilizable 接口,该对象就可以被序列化. 然而在实际开发工程中,我们会遇到,这个类的有些属性不需要序列化,比如包含用户的敏感信息(如密码),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字. 总之,java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到

java关键字transient与volatile小结

本文转自:http://heaven-arch.iteye.com/blog/1160693 transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下. transient transient是类型修饰符,只能用来修饰字段.在对象序列化的过程中,标记为transient的变量不会被序列化. 示例: class Test {transient int a; // 不会被持久化int b; // 持久化} 当类Test的实例对象被

Java关键字transient和volatile小结

转自:http://heaven-arch.iteye.com/blog/1160693 transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下. transient transient是类型修饰符,只能用来修饰字段.在对象序列化的过程中,标记为transient的变量不会被序列化. 示例: class Test { transient int a; // 不会被持久化 int b; // 持久化 } 当类Test的实例对象

JAVA关键字transient

转载自http://www.cnblogs.com/liuling/archive/2013/05/05/transient.html 1.transient关键字只能修饰变量,而不能修饰方法和类.注意,本地变量是不能被transient关键字修饰的.2.被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化.3.一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问.也可以认为在将持久化的对象

Java关键字-transient

transient的作用 针对实现了Serilizable接口(对象传输时候自动进行序列化操作)的对象,在指定的变量前加transient关键字,表示该变量不参与序列化.即在序列化过程中该变量的值为空. transient的使用方法 1.修饰变量(基本类型和jdk自带的类),不能修饰方法和类2.如果是自定义类,则要实现Serilizable接口3.修饰static变量是没有作用的4.不支持实现了Externalizable接口的类...Externalizable接口(另一种序列化手段)实现了此

Java的transient关键字(转)

Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值.     Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比.     这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化.     而volatile关键字就是提示

java关键字之transient

转自:http://www.cnblogs.com/lanxuezaipiao/p/3369962.html 1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化. 然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,