Tag: compile time constant

说int枚举模式是编译时常量是什么意思?

这来自Effective Java 使用int枚举模式的程序很脆弱。 因为int枚举是编译时常量,所以它们被编译到使用它们的客户端中。 有人可以解释为什么int枚举模式被称为编译类型常量以及编译到客户端的含义是什么? 这是一个这样一个常数的例子: public static final int APPLE_FUJI = 0;

为什么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,但由于它是零除以它只是让它通过。 没有编译时错误。 但这看起来非常奇怪…编译器知道它是一个除以零并且它会崩溃运行时但是它不会标记编译错误! 任何人都可以向我解释原因吗?