2

需要明确的是,这个问题是严格假设的。就个人而言,我在现实世界中不需要这种行为;我偶然发现了它。

灵感来源:如何制作(静态)初始化程序块 strictfp?

如果我声明一个带有strictfp修饰符的 Java 类:

public strictfp class PublicStrictfpClass
{
    public double f() { return 2d / 3d; }
}

...然后我测试使用Modifier.isStrict(int)

public static void main(String[] argArr)
{
    if (! Modifier.isStrict(PublicStrictfpClass.class.getModifiers()))
    {
        throw new IllegalStateException("Unreachable code");
    }
}

上面的代码失败:方法main()throws IllegalStateException。我尝试了一个有没有方法的类声明PublicStrictfpClass.f()——都失败了。

我是不是误会了……?

  • 在类声明中使用strictfp修饰符?
  • 方法Modifier.isStrict(int)

我正在使用 OpenJDK 8 的最新补丁从 Linux 运行此代码。

最后,在问这个问题之前,我做了一堆谷歌搜索。关键字strictfp在野外非常罕见!

4

1 回答 1

4

可能是因为类文件中的类修饰符没有包含strictfp(不知道为什么,一定要问Java开发者)。这就是该getModifiers()方法所研究的内容,其文档指出:“修饰符由 Java 虚拟机的常量组成,用于public, protected, private, final, static,abstractinterface”。(所以没有提及strictfp

您仍然可以获得方法的修饰符f。方法修饰符包括strictfp

Modifier.isStrict(PublicStrictfpClass.class.getMethod("f").getModifiers())
于 2022-01-07T16:04:49.357 回答