如何在方法中使用strictfp关键字?

时间:2015-02-13 05:38:09

标签: java strictfp

我知道strictfp关键字可以应用于方法,类和接口。

strictfp class A{} //Accept

strictfp interface M{} //Accept  

class B{  
strictfp A(){} // Not Accept
}  

3 个答案:

答案 0 :(得分:0)

它也可以用在方法上。但不是建设者。在您的示例中,您已将其应用于构造函数而不是方法。

但是,一旦应用于类,它将自动应用于静态和实例块,所有类变量,所有构造函数

答案 1 :(得分:0)

如果您将strictfp应用于课程,则适用于所有成员。 正如你在javadoc中看到的那样:

  

strictfp修饰符的作用是使类声明中的所有float或double表达式(包括在变量初始化器,实例初始化器,静态初始化器和构造函数中)显式为FP严格

     

这意味着在类中声明的所有方法以及在类中声明的所有嵌套类型都是隐式strictfp

strictfp keyword usage

注意:strictfp关键字不能显式应用于抽象方法,变量或构造函数。

答案 2 :(得分:0)

您可以显式声明类strictfp并且该类中的方法显式为strictfp但不是成员变量,例如

// Compiles Fine
strictfp class A {strictfp void mA(){ } int i=0; } 

// Compiler Error because of declaring i variable strictfp 
strictfp class B {strictfp void mB(){ } strictfp int i=0;}

// Compiler Error because of declaring i variable strictfp 
class C {strictfp void mC(){ } strictfp int i=0; }

接口

您不能声明接口strictfp和该接口中的方法/成员显式strictfp,因为它会给编译器错误:

// Compiler Error
strictfp interface A {strictfp double mA(); static int i = 0;} 

解决方案:声明接口strictfp而不是接口中的方法/成员。通过这样做,界面中的所有方法和成员都将是strictfp

//Compiles Fine
strictfp interface A {double mA(); static int i = 0;}