Tag: constant expression

为什么Java常量除以零会产生编译时错误?

可能重复: 1/0是合法的Java表达式吗? 为什么这段代码会编译? class Compiles { public final static int A = 7/0; public final static int B = 10*3; public static void main(String[] args) {} } 如果我查看已编译的类文件,我可以看到B已经被评估为30,而A仍然是7/0。 据我所知,JSL是一个除以零的表达式,不是常数。 参考: JLS 15.28 我的上述陈述是由于这一行: 编译时常量表达式是表示基本类型值的表达式 因此,除以零不会被评估为原始值。 我真的不明白为什么编译器允许这个呢? 为了清楚起见,上面的代码使用“java.lang.ExceptionInInitializerError”崩溃了运行时 在我看来,编译器威胁任何最终的静态变量作为常量并评估它的编译时间。 这意味着编译器已经尝试评估A,但由于它是零除以它只是让它通过。 没有编译时错误。 但这看起来非常奇怪…编译器知道它是一个除以零并且它会崩溃运行时但是它不会标记编译错误! 任何人都可以向我解释原因吗?