0

我想知道 javac 是如何计算这个常量表达式的?

class Test {
   public static final int NaN = 0 / 0;
...
4

2 回答 2

3

它在Java 语言规范 §15.17.2中定义:

有一种特殊情况不满足此规则:如果被除数是其类型的最大可能量级的负整数,并且除数为-1,则发生整数溢出并且结果等于被除数。尽管溢出,在这种情况下不会抛出异常。另一方面,如果整数除法中除数的值为0,则ArithmeticException抛出an。

这意味着什么:如果被除数为 0,那么除数是什么并不重要;它会直接抛出ArithmeticException

现在,如果您使用的是doublesNaN ,那将通过JLS §15.17.2给您回报。

于 2012-12-16T07:15:19.173 回答
0

Java 的整数原始类型中没有“NaN”或“Inf”值的表示。(或者在大多数其他语言中。)

实际发生的是 anArithmeticException将被抛出......在运行时。

由于这个表达式是在类的静态初始化中求值的,初始化类将失败,任何其他依赖于它的类也将初始化失败。很有可能您的应用程序甚至不会进入该main方法的第一个语句。

于 2012-12-16T07:23:17.010 回答