`

java 的特殊类型修饰

    博客分类:
  • java
阅读更多

Java中的transient,volatile和strictfp关键字 
    如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如: 
Java代码   收藏代码
  1. class T {  
  2.    transient int a;  //不需要维持  
  3.    int b;  //需要维持  
  4. }  

    这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存。 
   
volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变。在多线程程序中,有时两个或更多的线程共享一个相同的实例变量。考虑效率问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在不同的时候更新,如当进入synchronized方法时。 
    用strictfp修饰类或方法,可以确保浮点运算(以及所有切断)正如早期的Java版本那样准确。切断只影响某些操作的指数。当一个类被strictfp修饰,所有的方法自动被strictfp修饰。 
    strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。 
你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,例如下面的代码: 

1. 合法的使用关键字strictfp 
Java代码   收藏代码
  1. strictfp interface A {}  
  2.   
  3. public strictfp class FpDemo1 {  
  4.     strictfp void f() {}  
  5. }  

2. 错误的使用方法 
Java代码   收藏代码
  1. interface A {  
  2.     strictfp void f();  
  3. }  
  4.   
  5. public class FpDemo2 {  
  6.     strictfp FpDemo2() {}  
  7. }  

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



Keys: volatile 

使用对象:字段 

介绍:因为异步线程可以访问字段,所以有些优化操作是一定不能作用在字段上的。volatile有时 

可以代替synchronized。 




Keys:transient 

  使用对象:字段 

  介绍:字段不是对象持久状态的一部分,不应该把字段和对象一起串起。 

分享到:
评论

相关推荐

    疯狂JAVA讲义

    第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6...

    java三大特性说明

     Java常见的访问控制修饰符:  Public :到处都可以访问,不受包和父子类关系的限制  默认: 只在同包内可以访问,不受父子类关系限制  Protected: 不同包的子类和同包的类中访问,这是一种继承访问。  Private...

    java程序设计预赛

     B、构造方法的返回类型只能是void型,且书写格式是在方法名前加void前缀  C、构造方法的主要作用是完成对类的对象的初始化工作  D、一般在创建新对象时,系统会自动调用构造方法 (6) 下面2个文件位于相同目录下...

    JAVA面试题最全集

    1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出...

    JAVA复习资料

    12、在Java中有一种叫作__构造方法__的特殊方法,我们在程序中用它来对类的对象成员进行初始化。 13、面向对象技术具有_封装性___、_继承性___、_抽象性___、多态性等特性。 14、Java中所有类都是类 _Object___...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    现了类的的层次,可以从最一般的类开始,逐步特殊化,定义一系列的子类。同时,通过继 承也实现了代码的复用,使程序的复杂性线性地增长,而不是呈几何级数增长。 2.2.6 抽象 面向对象的程序设计系统鼓励充分...

    Java面试宝典2020修订版V1.0.1.doc

    3、列举javaScript的3种主要数据类型,2种复合数据类型和2种特殊数据类型。 24 4、谈谈你的JS的理解? 24 5、ajax的优点? 25 6、简述一下ajax调试代码查找错误的方法? 26 7、简述ajax中Js脚本缓存问题该如何解决?...

    java 面试题 总结

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byte...

    Java程序设计习题(含答案解析).doc

    目 录 一、判断题 2 二、选择题 4 三、填空题 17 四、写出下列程序完成的功能 25 五、写出下面程序的运行结果 29 六、使用Java语言编写程序 33 七、简答题 34 Java程序设计习题...( F ) 45、Java语言中一个Char类型的数

    自考04747《Java语言程序设计(一)》简答题全集.doc

    或者是参数个数不同,或者是参数类型不同〔1分〕 17、 什么是构造方法 构造方法是一种特殊方法 〔1分〕 它的名字必须与它所在的类的名字完全相同 〔1分〕 并且不返回任何数据类型,即它是void型 〔1分〕 18、 什么是...

    最新自考04747《Java语言程序设计(一)》简答题全集资料.doc

    或者是参数个数不同,或者是参数类型不同(1分) 17、 什么是构造方法 构造方法是一种特殊方法 (1分) 它的名字必须与它所在的类的名字完全相同 (1分) 并且不返回任何数据类型,即它是void型 (1分) 18、 什么是...

    Java面向对象程序设计(“方法”相关文档)共57张.pptx

    类和对象 类是具有共同特性和行为的事物的抽象,是一种特殊数据类型。在类中包含了数据和与数据有关的操作(方法)。 对象是类的实例。 类 汽车 对象 客车 抽象 实例化 Java面向对象程序设计("方法"相关文档)共57张...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例135 使用特殊域变量实现线程同步 175 实例136 使用重入锁实现线程同步 176 实例137 使用线程局部变量实现线程同步 177 实例138 简单的线程通信 179 实例139 简单的线程死锁 180 实例140 解决线程的死锁问题 182 ...

    超级有影响力霸气的Java面试题大全文档

     Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character ...

    Java-PHP-C#

    现在,我们已经可以确认字符串了, 我们现在把所有逗号都去掉 str_replace(",", "", $money) 然后在把类型看成 double然后我们就可以通过他做数学计算了. 构造检查email的正则表达式 好,让我们继续讨论怎么验证一...

    计算机(专升本)Java程序设计复习资料.doc

    重载对返回类型没有特殊的要求。 重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回 类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。 3. 抽象类与接口的异同 ...

    Java学习笔记(必看经典)

    JAVA的面向对象编程--------课堂笔记 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 所有的事物都有两个方面: 有什么(属性):用来描述对象。 能够做...

Global site tag (gtag.js) - Google Analytics