Java strictfp关键字
strictfp 是一个代表严格浮点的修饰词,在java的基础版本中没有引入,因为它是在Java 1.2版本中引入的。
浮点计算与平台有关,即当一个类文件在不同的平台(16/32/64位处理器)上运行时,会得到不同的输出(浮点值)。为了解决这类问题,JDK 1.2版本中引入了strictfp关键字,遵循IEEE 754浮点计算标准。
注意: strictfp修改器只用于类、接口和方法,但不适用于变量,如下图所示。
插图1: 类的关键字用法
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}
插图2: 关键词的使用与接口
strictfp interface Test {
// All methods here becomes implicitly
// strictfp when used during inheritance.
}
class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}
插图3: 带有变量的关键词用法
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}
从上面的说明中可以得出以下一些结论。
- 当一个类或接口用strictfp修饰符声明时,那么在该类/接口中声明的所有方法,以及在该类中声明的所有嵌套类型,都隐含着strictfp。
- strictfp 不能 被用于抽象方法。然而,它可以与抽象类/接口一起使用。
- 由于接口的方法是隐式抽象的,所以strictfp不能用于接口中的任何方法。
- 从Java 17版本开始,由于所有的浮点表达式都是严格评估的,所以不需要明确地使用strictfp关键字。
例子
// Java program to illustrate strictfp modifier
// Usage in Classes
// Main class
class GFG {
// Method 1
// Calculating sum using strictfp modifier
public strictfp double sum()
{
double num1 = 10e+10;
double num2 = 6e+08;
// Returning the sum
return (num1 + num2);
}
// Method 2
// Main driver method
public static void main(String[] args)
{
// Creating object of class in main() method
GFG t = new GFG();
// Here we have error of putting strictfp and
// error is not found public static void main method
System.out.println(t.sum());
}
}
输出