【问题标题】:Why doesn't compile-time exception division by zero produce at Eclipse IDE?为什么在 Eclipse IDE 中不产生编译时异常除以零?
【发布时间】:2014-03-13 10:22:02
【问题描述】:

请检查以下代码...

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

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

【问题讨论】:

  • 和C++有什么关系? GCC 编译器可能会警告你....
  • @Raxvan 抱歉我已编辑。

标签: java eclipse exception divide-by-zero


【解决方案1】:

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

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

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

更新

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

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

【讨论】:

  • 1/0 使用文字可以保证运行,因此肯定会导致异常,甚至可能在编译时计算优化,而首先解析字符串可能会在除以零之前失败.
  • 我确信我的 Eclipse IDE 不会出现任何错误或警告声明 1/0。 java编译器是这样吗?
  • @Cataclysm 正如我在编辑中所说,它取决于编译器,并且可能有理由在编译时不抛出异常。
  • 很好!现在我对您更新的答案感到满意。感谢您的好回答和有用的链接。
猜你喜欢
  • 2011-06-26
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
相关资源
最近更新 更多