Java中的transient,volatile和strictfp关键字
如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如:
- class T {
-
transient int a;
-
int b;
- }
class T {
transient int a; //不需要维持
int b; //需要维持
}
这里,如果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
- strictfp interface A {}
-
-
public strictfp class FpDemo1 {
-
strictfp void f() {}
- }
strictfp interface A {}
public strictfp class FpDemo1 {
strictfp void f() {}
}
2. 错误的使用方法
- interface A {
-
strictfp void f();
- }
-
-
public class FpDemo2 {
-
strictfp FpDemo2() {}
- }
interface A {
strictfp void f();
}
public class FpDemo2 {
strictfp FpDemo2() {}
}
一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。
Keys: volatile
使用对象:字段
介绍:因为异步线程可以访问字段,所以有些优化操作是一定不能作用在字段上的。volatile有时
可以代替synchronized。
Keys:transient
使用对象:字段
介绍:字段不是对象持久状态的一部分,不应该把字段和对象一起串起。
分享到:
相关推荐
本文将详细介绍Java中的关键字和保留字,并探讨它们在程序开发中的应用。 #### 二、Java关键字详解 Java关键字是对Java编译器有特殊意义的词,它们用于表示特定的数据类型或程序结构。Java的关键字不能用作变量名...
在Java中,一共有53个关键字,包括两个保留字。下面将详细阐述这些关键字的功能和用途。 1. `abstract` - 用于声明抽象类或抽象方法,表示类不提供具体实现。 2. `assert` - 用于断言某个条件为真,通常用于测试和...
本文将详细介绍Java中的一些核心关键字,并提供相应的解释和示例。 #### 关键字列表 根据给定的部分内容,我们可以列出以下Java关键字: 1. **abstract** 2. **continue** 3. **for** 4. **new** 5. **switch** 6...
### Java中的50个关键字详解 #### 一、引言 Java作为一种广泛使用的编程语言,在其语法体系中定义了一系列关键字,这些关键字具有特定的意义和用途,对于理解和编写Java程序至关重要。本文将详细介绍Java中与数据...
- 修饰方法、类、属性和变量关键字:如`static`、`final`、`native`、`synchronized`、`transient`、`volatile`、`strictfp`,用于提供额外的信息来修饰类、方法和变量。 - 异常处理关键字:如`try`、`catch`、`...
在Java中,我们可以使用`System.in`来读取标准输入流,通常用户可以通过键盘输入源代码,或者通过管道将文件内容传递给程序。例如,可以使用`BufferedReader`或`Scanner`类读取这些输入: ```java import java.io....
Java关键字和命名规范是Java编程语言中的基础概念,它们对于编写清晰、规范的代码至关重要。Java关键字是Java语言内置的、具有特殊用途的保留字,而命名规范则是关于如何给类、方法、变量等命名的约定。 ### Java...
在Java中,一共有51个关键字(包括保留字),但描述中提到的是48个,可能是因为某些关键字在特定上下文不常用或者被归类到保留字中。下面将详细介绍这些关键字及其用途。 1. **abstract** - 用于声明抽象类或抽象...
Java 共有 50 多个关键字,它们包括但不限于 `abstract`、`assert`、`boolean`、`break`、`byte`、`case`、`catch`、`char`、`class`、`const`(虽然未使用)、`continue`、`default`、`do`、`double`、`else`、`...
private、public、protected、final、static、abstract、synchronized、volatile、strictfp、native、transient 等修饰符关键字;try、catch、finally、throw、throws 等异常处理关键字;new、extends、implements、...
本文将详细介绍Java中的50个常用关键字,并按照其功能类别进行分类。 #### 数据类型相关关键字 (10个) 1. **byte**: 表示8位带符号的整数类型。 2. **short**: 表示16位带符号的整数类型。 3. **int**: 表示32位带...
了解Java中的关键字对于学习这门语言至关重要,它可以帮助程序员更好地理解和应用Java语言的各种特性。 #### 二、Java关键字列表及解释 根据《Java语言程序设计-关键字》pdf版电子教材,下面列出了Java语言中的所有...
总之,理解和掌握Java的关键字和保留字是学习Java编程的基础,它们决定了程序的结构和行为,是编写有效、合法Java代码的关键。在编写代码时,要避免使用这些保留字作为变量名或函数名,以免引发编译错误。
`goto`和`const`是C语言的关键字,在Java中已被弃用,但保留其地位以保持语言的一致性。 掌握这些关键字和保留字是Java编程的基础,能够帮助程序员更准确地理解和应用语言特性,从而编写出更加高效、健壮的代码。
以上仅是Java关键字的一部分,还有许多其他关键字,如`synchronized`, `volatile`, `transient`, `native`, `strictfp`等,它们各自承担着特定的功能。理解和熟练使用这些关键字是成为一名合格的Java程序员的基础。...
本文将详细介绍Java中的关键字及其用途。 #### 关键字列表与解释 1. **abstract** - **用途**:用于声明抽象类和抽象方法。抽象类不能实例化,只能作为其他类的父类。抽象方法是没有实现的方法,必须在子类中提供...
native,transient,volatile,strictfp,CMM,synchronized,java socket,压缩与解压缩,多线程,垃圾回收算法,JVM ClassLoader,IO流,反射机制,JNDI, GUI布局管理器,JMS, Java Mail, JNDI reference,java事件处理...
代替const的功能通常使用public static final,而goto则不存在于Java中。 浮点数计算的精度问题可以通过使用strictfp关键字来控制,它确保浮点计算遵循FP-strict规则,保证跨平台的数值一致性。另一方面,transient...
虽然在早期的Java版本中存在`const`关键字,但它并未被使用,并且在Java 1.5之后已经被废弃。 #### 11. `continue` `continue`关键字用于跳过当前循环中的剩余部分,并继续下一次迭代。 **示例:** ```java for ...