为什么在Eclipse IDE中没有编译时异常除以零产生?

时间:2014-03-13 10:22:02

标签: java eclipse exception divide-by-zero

请检查以下代码......

    // this will produce java.lang.ArithmeticException: / by zero
    System.out.println(1 / 0);
    // this will produce Infinity result
    System.out.println(1.1 / 0);

我假设整数算术将始终抛出 java.lang.ArithmeticException:/ by zero 。如果是这样,我想第一个语句或System.out.println(Integer.parseInt("1") / 0);应该产生编译时异常。但是我的 Eclipse IDE 上没有任何编译时错误或警告。或者可能是我错了。
有什么建议吗?

1 个答案:

答案 0 :(得分:3)

Integer.parseInt("1")只会在运行时执行。编译器不知道解析操作是否会成功。

根据编译器1/0可能在编译时进行优化,编译器可能只是将结果写入编译代码。因此它会在那里抛出异常。但是,如果该计算没有得到优化,编译器在执行之前不会知道该操作的结果。

顺便说一下,我的Eclipse编译器似乎没有这样做(我还没有检查设置)并编译1/0就好了。

<强>更新

虽然1/0是一个可以在编译时计算的常量表达式,但编译器仍然可以选择忽略它并编译代码。

这里有一些类似的问题,其中包含更多信息:Why doesn't a Java constant divided by zero produce compile time error?