这是来自有效的Java
使用int枚举模式的程序很脆弱。因为int枚举是编译时常量,所以它们被编译到使用它们的客户端中。
有人可以解释为什么int枚举模式被称为编译类型常量,以及将其 编译到客户端 意味着什么吗?
这是一个这样的常量的例子:
public static final int APPLE_FUJI = 0;
假设您有两个文件:
Foo.java:
public class Foo
{
public static final int SOMETHING = 1;
}
Bar.java:
public class Bar
{
public static void main(String[] args)
{
System.out.println(Foo.SOMETHING);
}
}
都编译它们,运行java Bar
,它将打印出1。
现在将Foo.java更改SOMETHING
为2,然后重新编译 Foo.java 。重新运行java Bar
,它将 仍然
打印1。该常数值将被复制到使用该常数的每个代码段中,而不是Foo
在执行时从中询问该值。
实际上, 如果 您在任何变化时重新编译所有内容,这不是问题。
想改进这个问题吗 通过编辑此帖子,添加详细信息并澄清问题。 当你说枚举在java中是常量时,你实际上是什么意思? 它们是什么类型的常量(整数常量、字符常量、字符串常量)? 当我使用枚举作为切换用例值时,为什么Java系统没有抱怨? 据我所知,在1.7之前,switch语句接受byte、short、int或char作为大小写值。所以,当有人说枚举是常量,并且可以在开关情况下使用时,他们指的是什么类型
本文向大家介绍举例说明什么是响应式编程?相关面试题,主要包含被问及举例说明什么是响应式编程?时的应答技巧和注意事项,需要的朋友参考一下 In computing, reactive programming is a programming paradigm oriented around data flows and the propagation of change. What is respo
在typescript中枚举的用途是什么。如果它的目的仅仅是使代码可编辑,我们就不能使用常量来达到同样的目的吗 如果没有打字检查的好处,就不能写成。
我试图创建一个编译时常量,这样R8就可以在最终的生产apk中省略调试代码。我遇到了一个路障,不可分配给。 进一步检查后,我发现用wrapper。 这里的问题是: 为什么不能将静态最终布尔值指定给常量值
问题内容: 我读到Linux内核是抢占式的,这与大多数Unix内核不同。那么,内核抢占到底意味着什么呢? 一些类比或示例将比纯理论解释更好。 添加2018年1月1日-11:00 AM 抢占式只是多任务处理的一种范例。还有其他类似协作多任务处理。通过比较它们可以更好地理解。 问题答案: 想象一下抢占式多任务的简单视图。我们有两个用户任务,它们都一直在运行,而没有使用任何I / O或执行内核调用。这两
问题内容: 嗨,我遇到过Java编译器使用了称为Constant Folding的东西。这是什么?以及如何影响? 问题答案: 常量折叠是编译器在其中查找包含编译时常量的表达式并将其替换为结果的地方,可有效删除多余的运行时计算。