我想知道javac如何计算这个常量表达式?
class Test {
public static final int NaN = 0 / 0;
...
答案 0 :(得分:3)
它在Java Language Specification, §15.17.2:
中定义有一种特殊情况不满足此规则:如果被除数是其类型的最大可能幅度的负整数,且除数为-1,则发生整数溢出,结果等于被除数。尽管溢出,但在这种情况下不会抛出异常。另一方面,如果整数除法中的除数值为0,则抛出
ArithmeticException
。
这意味着什么:如果红利是0,那么除数是什么并不重要;它会彻底抛出ArithmeticException
。
现在,如果您使用的是双打,则可以通过JLS §15.17.2返回NaN
。
答案 1 :(得分:0)
Java的整数基元类型中没有“NaN”或“Inf”值的表示。 (或者在大多数其他语言中。)
实际发生的是在运行时将抛出ArithmeticException
。
由于此表达式是在类的静态初始化中计算的,因此初始化类将失败,并且依赖于它的任何其他类也将无法初始化。您的应用程序很可能甚至不会使用main
方法的第一个语句。