Java中的transient,volatile和strictfp关键字
如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如:
写道
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() {}
}
2. 错误的使用方法
写道
interface A {
strictfp void f();
}
public class FpDemo2 {
strictfp FpDemo2() {}
}
一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。
Keys: volatile
使用对象:字段
介绍:因为异步线程可以访问字段,所以有些优化操作是一定不能作用在字段上的。volatile有时
可以代替synchronized。
Keys:transient
使用对象:字段
介绍:字段不是对象持久状态的一部分,不应该把字段和对象一起串起。
分享到:
相关推荐
native,transient,volatile,strictfp,CMM,synchronized,java socket,压缩与解压缩,多线程,垃圾回收算法,JVM ClassLoader,IO流,反射机制,JNDI, GUI布局管理器,JMS, Java Mail, JNDI reference,java事件处理...
private、public、protected、final、static、abstract、synchronized、volatile、strictfp、native、transient 等修饰符关键字;try、catch、finally、throw、throws 等异常处理关键字;new、extends、implements、...
浮点数计算的精度问题可以通过使用strictfp关键字来控制,它确保浮点计算遵循FP-strict规则,保证跨平台的数值一致性。另一方面,transient关键字用于标记一个成员变量,表示该变量不应被序列化,即不会被保存在持久...
50 多个关键字,它们包括但不限于 `abstract`、`assert`、`boolean`、`break`、`byte`、`case`、`catch`、`char`、`class`、`const`(虽然未使用)、`continue`、`default`、`do`、`double`、`else`、`enum`、`...
- 修饰方法、类、属性和变量关键字:如`static`、`final`、`native`、`synchronized`、`transient`、`volatile`、`strictfp`,用于提供额外的信息来修饰类、方法和变量。 - 异常处理关键字:如`try`、`catch`、`...
修饰符如`private`, `public`, `protected`定义了访问权限,`final`, `static`, `abstract`, `native`, `synchronized`, `volatile`, `strictfp`, `transient`分别用于定义不可变对象、静态成员、抽象方法、本地方法...
`switch`, `synchronized`, `this`, `throw`, `throws`, `transient`, `try`, `void`, `volatile`, `while`。可以创建一个关键字列表,然后遍历每行代码,检查是否包含这些关键字。 为了提高效率,我们可以使用...
在Java编程语言中,关键字是一组预定义的词汇,它们具有特殊的含义和用途。理解和掌握这些关键字对于编写有效的Java程序至关重要。本文将详细介绍Java中的一些核心关键字,并提供相应的解释和示例。 #### 关键字...
strictfp关键字的使用 - `strictfp`关键字用于确保浮点运算的一致性和准确性。当一个类或方法被声明为`strictfp`时,其内部所有的浮点运算都将遵循IEEE-754标准,从而保证跨平台的运算结果一致性。这对于依赖于...
- **方法、变量和类修饰符**:private、public、protected、final、static、abstract、synchronized、volatile、strictfp、native和transient,这些修饰符用于控制访问权限、确定变量和方法的特性,以及类的实现方式...
这只是Java关键字的一部分,还有许多其他关键字,如 `float`, `for`, `if`, `import`, `instanceof`, `new`, `package`, `return`, `static`, `strictfp`, `super`, `this`, `throw`, `throws`, `transient`, `try`,...
50. **volatile** - 用于共享变量,确保多线程环境中的可见性和顺序一致性。 51. **while** - 循环结构,先检查条件再执行循环体。 以上就是Java的48个关键字的概述,它们构成了Java编程的基础,理解并熟练掌握...
本文将详细介绍Java中的关键字和保留字,并探讨它们在程序开发中的应用。 #### 二、Java关键字详解 Java关键字是对Java编译器有特殊意义的词,它们用于表示特定的数据类型或程序结构。Java的关键字不能用作变量名...
1. **`transient` 和 `volatile` 关键字**: - `transient` 关键字用于标记一个实例变量,表明该变量在序列化时不应被持久化。这意味着当对象被序列化并存储到持久化存储中时,`transient`修饰的变量不会被保存,而...
以上仅是Java关键字的一部分,还有许多其他关键字,如`synchronized`, `volatile`, `transient`, `native`, `strictfp`等,它们各自承担着特定的功能。理解和熟练使用这些关键字是成为一名合格的Java程序员的基础。...
2. 类、方法和变量修饰符:abstract、final、static、transient、volatile - abstract表示抽象类或方法,抽象类不能实例化,抽象方法必须在子类中实现。 - final表示最终的,用于类表示不可继承,用于方法表示不可...
在深入探讨Java的关键字与保留字之前,我们首先需明确两个概念:关键字和保留字。在编程语言中,关键字是预定义的具有特殊含义的标识符,它们在编译时被解析器识别并执行特定的功能;而保留字则是语言设计者为未来...
Java关键字和命名规范是Java编程语言中的基础概念,它们对于编写清晰、规范的代码至关重要。Java关键字是Java语言内置的、具有特殊用途的保留字,而命名规范则是关于如何给类、方法、变量等命名的约定。 ### Java...
1. **关键字 transient 和 volatile**: - `transient` 是Java的关键字,用于标记字段,表明该字段的值不会在序列化过程中被持久化。这意味着当对象被序列化后,被`transient`修饰的变量将不会包含在序列化的表示中...
49. **volatile**:修饰字段,确保多线程环境下的可见性和不被优化。 50. **while**:用于循环,只要条件为真就继续执行。 了解并熟练掌握这些关键字对于编写高质量的Java代码至关重要。HTML制作的文档使得这些...