`

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语言笔记包括基本数据类型、变量类型、修饰符、运算符等

    ### Java语言笔记——基本数据类型、变量类型、修饰符、运算符详解 #### 一、Java基本数据类型 Java提供了两种基本的数据类型:内置数据类型和引用数据类型。内置数据类型可以直接存储数值,而引用数据类型则存储...

    Java 修饰符和运算符

    Java 中的主要运算符类型包括: 1. **算术运算符**:如 `+`(加法)、`-`(减法)、`*`(乘法)、`/`(除法)和 `%`(取余)。还有两个特殊的自增和自减运算符 `++` 和 `--`,它们可以用于递增或递减变量的值。 2....

    深入浅出谈java修饰符共6页.pdf.zip

    在Java中,修饰符分为访问修饰符、非访问修饰符和特殊修饰符三类。以下是对这些修饰符的详细解释: 1. 访问修饰符: - `public`: 公有的,可以被任何类访问。当一个类或方法被声明为`public`时,它可以在程序的...

    java类修饰词和内部类详解

    ### Java 类修饰词详解 Java 作为一种广泛使用的面向对象编程语言,其提供的各种类修饰词在定义类的行为、访问控制等方面发挥着重要作用。本文将详细解释 Java 中的四种主要访问控制修饰词:`public`、`protected`...

    JAVA修饰符总结.pdf

    ### Java修饰符总结 #### 一、概述 Java是一种广泛使用的面向对象编程语言,它具有简单、健壮、面向对象和平台无关等特性。在Java中,为了更好地控制类、方法、变量等成员的访问权限以及行为特征,引入了多种修饰...

    java面经八股文整理

    构造方法是用于对象初始化的特殊方法,名称与类名相同,不能写返回值类型,不能被继承。普通方法是对象调用的方法,可以被多次调用。构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。 ...

    java主函数的特殊使用

    4. **返回类型**:`void` - `main`方法不返回任何值。通常,程序的控制流在`main`方法结束后终止。 5. **类之间的主函数调用** - 在描述中提到的“两个类之间主函数的特殊调用”可能是指在多个类中定义了`main`...

    Java基础教程完整版

    Java学习系列(二):Java注释、标识符、基本数据类型及其转换易错点详解 本章节主要讲解Java的注释、标识符、基本数据类型及其转换。Java中的注释包括单行注释、多行注释和文档注释。标识符是Java程序中用来命名...

    java常见试题

    构造器是Java中的特殊方法,用于初始化对象。构造器不能被继承,但可以被重载。 equals()和hashCode()方法 equals()方法用于比较两个对象的值是否相等,hashCode()方法用于获取对象的哈希码。两个对象如果equals()...

    ModifierTypesJava:在Java上学习简单的修饰符类型

    本教程将深入探讨Java中的基本修饰符类型,包括访问修饰符、静态修饰符、最终修饰符、抽象修饰符和其他特殊修饰符。 1. 访问修饰符: - `public`:任何地方都可以访问,无限制。 - `protected`:同包内和子类可以...

    Java入门基础之Java的基本语法与Java所支持的数据类型

    总的来说,了解Java的基本语法和数据类型是学习Java编程的基础。掌握类、对象、方法、实体变量的概念,理解大小写敏感性、文件命名规则、标识符和修饰符的使用,以及熟悉关键词的意义,将有助于你构建坚实的Java编程...

    The Java Language Specification, Java SE 6 Edition.rar

    Java 6中,可以使用final关键字修饰字段以防止被修改,或者用private修饰限制访问。 3. 继承:Java允许一个类(子类)继承另一个类(父类),从而获得父类的属性和方法。子类可以覆盖或扩展父类的方法,实现代码...

    JavaSE基础(标识符+关键字+字面量+数据类型+类型转换+修饰符+代码块+方法重载+this关键字等)

    JavaSE基础是学习Java编程的重要部分,涵盖了标识符、关键字、字面量、数据类型、类型转换、修饰符、代码块、方法重载、this关键字等多个核心概念。 首先,标识符是程序中用来命名类、方法、变量等的符号,遵循特定...

    2021年JAVA枚举类型知识点.docx

    Java中的枚举类型(enum)是面向对象编程中一种特殊的类,它用于定义一组固定的、预定义的值。枚举类型在2005年Java 5版本中引入,为编程提供了更多的类型安全性和可读性。以下是关于Java枚举类型的详细知识点: 1....

    JAVA类与对象及数组习题

    JAVA类与对象及数组习题 JAVA类和对象及数组是JAVA编程...在JAVA中,变量的类型可以是基本类型或引用类型,例如`int`、`String`等。 14. 编程实践: 通过实际编程实践,可以加深对JAVA类和对象及数组的理解和应用。

    java笔记 java笔记

    Java提供了四种访问修饰符:`public`、`private`、`protected`和`default`,用于控制类、方法和变量的可见性。 ##### 6.7 构造方法 构造方法是一种特殊的方法,用于初始化对象。 ##### 6.8 封装 封装是指隐藏...

    Java经典面试题大全(带答案)

    类(Class)并不是Java程序的一个独立类型,而是构成Java程序的基本单元之一。 2. **编译Java源代码的选项** - **知识点**:编译Java源代码的命令行选项。 - **解释**:使用`javac`编译器编译Java源代码时,可以...

    java常见面试题(史上最全最经典-希望对你有用)

    后一条语句正确,因为+=是Java语言规定的运算符,Java编译器会对它进行特殊处理。 * char型变量中能否存贮一个中文汉字?char型变量是用来存储Unicode编码的字符的,Unicode编码字符集中包含了汉字,所以,char型...

    100道java题陈辉

    关键字是Java语言中具有特殊含义的保留字,如`public`、`class`等;标识符用于命名变量、类、方法等。 ### 模块运算符 `%`是模运算符,用于求余数,如`5 % 8`的结果为5。 ### 自增与自减运算符 `++i`是前缀自增,...

    Java面向对象程序设计

    12. **泛型**:泛型是Java 5引入的新特性,允许在定义类、接口和方法时指定类型的参数,提高了代码的类型安全性和重用性。 13. **I/O流**:Java的I/O流系统支持数据的输入和输出,包括字符流和字节流,以及过滤流、...

Global site tag (gtag.js) - Google Analytics