是
1/0实际上应该编译随时随地法律Java表达式?
是。
JLS对此有何评论?
除了说被零除会导致运行时异常外,没有什么特别的。但是,JLS在以下定义中承认存在运行时异常的可能性:
“编译时常量表达式是表示原始类型或String的值的表达式,该值 不会突然完成, 并且仅使用以下内容组成:…”
(添加了强调。)因此以下内容将无法编译:
switch(i) { case 1: case 1 + 1: case 1 / 0: // compilation error.}如果这是合法的,那么有充分的理由吗?
好问题。我想这是一种抛出的方式,
ArithmeticException尽管这几乎不是合理的理由。用这种方式指定Java的更可能的原因是避免JLS和编译器处理不必要的情况而造成不必要的复杂性。
但这一切都是靠。事实是,这
1/0是有效的Java代码,并且任何Java编译器都不应将其标记为编译错误。(如果有编译器开关将其关闭,则对于Java编译器发出警告是合理的。)



