Java中变化无常的常量
问题:
第一版:
直接编译UserConstantsTest,编译过程中会检测到UserConstants尚未编译,然后会编译UserConstants
public class UserConstants {
public static final String USER_NAME = "admin";
public static final String PASSWORD = "123456";
public static final String DESCRIPTION = null;
}
public class UserConstantsTest {
public static void main(String[] args) {
System.out.println("User Name: " + UserConstants.USER_NAME);
System.out.println("Password: " + UserConstants.PASSWORD);
System.out.println("Description: " + UserConstants.DESCRIPTION);
}
}
运行结果如图所示:
第二版:
只修改UserConstants,并且只重新编译UserConstants,得到结果如下图所示:
public class UserConstants {
public static final String USER_NAME = "root";
public static final String PASSWORD = "123456789";
public static final String DESCRIPTION = "This is root account";
}
运行结果如图所示:
原因:
引用
First, true constant variables are inlined.
Second, null is not a constant variable and thus is not inlined and so the actual constant on the classpath is used in that case.
Java编译器会讲常数值编译到UserConstantsTest 的指令码或者常量池中,当UserConstantsTest使用这些常量时直接使用保存在类文件中的副本,但是null不是常量值,不受此限。
解决:
第一种:使用get方法来获取常量值
public static final String USER_NAME = "admin";
public static String getUserName () {
return USER_NAME;
}
第二种:使用ident方法来获取常量值
private static String ident(final String constant) {
return constant;
}
public static final String USER_NAME = ident("root");
public static final String PASSWORD = ident("123456789");
public static final String DESCRIPTION = ident("This is root account");
参考:
Inconstant Constants in Java:
http://www.javaworld.com/community/node/3400
- 大小: 5.8 KB
- 大小: 5 KB
分享到:
相关推荐
### Java中的“枚举类型”知识点详解 #### 一、引言 在Java编程语言中,枚举(Enum)作为一种特殊的类,其设计初衷是为了更好地处理一组固定不变的常量集合。相较于传统的使用`static final`字段来表示常量的做法...
”,有这个疑问说明你已经摸索到了枚举类型的主要功能:以统一命名的常量来替换变化无常的直接量,这是毫无疑问是枚举的主要作用,在大多数情况下,用static final是足够的,所以N多知名的源码里我们会经常看到用...
Java中的接口和抽象类是实现灵活性和扩展性的重要手段,设计模式则通过实例展示它们的广泛应用,帮助开发者深化对这些概念的理解。 设计模式追求可重用性,挑战软件开发中变化无常的需求,试图找出不变的部分并将其...
编译和运行Java程序:在Java中,程序先被编译器编译成字节码,然后由Java虚拟机(JVM)解释执行。编译是通过javac命令完成的,而运行则是通过java命令来执行编译好的字节码文件。 JRE安装配置:Java运行环境(JRE)...
CSP的难度变化无常,有时会出现难一次、易一次的趋势。例如,作者提到的第21次考试就显著地提升了难度,不仅第二题开始考察算法,而且后续题目也相当具有挑战性,导致平均分大幅下降。相反,第22次考试则相对简单。...
在营销决策中,这种策略尤其重要,因为市场变化无常,消费者行为难以预测,不确定因素众多。 小中取大法的基本思想是,决策者在每个可能的选择中,不是去寻找最好的结果,而是考虑最坏的结果,并选择在最坏情况下...
3. 生活哲学的理解:生活中的无奈与矛盾,如白天与黑夜的对比,揭示了生活的复杂性和变化无常,鼓励人们以积极的态度面对生活的起伏。 4. 青春主题的探讨:通过描绘青春期的感受,展现了青少年追求自由、独立及自我...
- 论证中引用了《易经》的观点,说明了变化中的悲欢离合是自然规律,否极泰来,乐极生悲。 - 对于有情世界,文章以宝玉的情感世界为例,展示了情支撑着世界的艺术美感。 - 最后,虚空世界被阐述为一种永恒的真理...
然而,技术更新快速,市场变化无常,投资者需要时刻关注技术趋势、市场动态和政策变化,以规避风险。同时,市场竞争激烈,投资者需选择有技术优势、品牌影响力和良好发展前景的企业进行投资。 总结来说,中国中地球...
诗中的“氓”指的就是那个变化无常的男子,诗通过女子的口吻揭示了爱情的两面性,强调了女性在爱情中的被动地位和牺牲精神。诗中的“士之耽兮,犹可说也。女之耽兮,不可说也。”是经典名句,揭示了古代社会中男女...
3. **灵活应变**:《孙子兵法》认为战争形势变化无常,因此要求指挥者灵活应对。同样,在学习中,学生需要根据自己的进步和外部环境的变化调整学习计划,善于创新和思考。 4. **道德与领导力**:孙子提到“道”,即...
由于WSN节点经常面对变化无常的外部环境,随机路由能通过在多个节点间动态分配负载,增加网络的灵活性和鲁棒性。而且,随机路由还有助于减轻网络瓶颈,提高数据传输的可靠性。不过,随机路由也有可能导致数据传输的...
5. 代码能力:精通至少一到两种编程语言,如Java、Python或C++,并熟练使用数据结构和算法,这是IT从业者的基本功。同时,了解版本控制工具如Git,以及开发框架如React或Angular,也是必不可少的。 6. 问题解决与...
从给定的文件内容来看,主要涉及的是对高中语文教材中《老人与海》这篇课文的理解与分析。本文将从标题、描述以及部分内容出发,详细阐述其中所包含的知识点。 ### 1. 《老人与海》的核心主题 《老人与海》是美国...
庄子哲学的现实意义在于,它能够引导学生在复杂纷扰的现代社会中保持一颗平和、宁静的内心,学会在变化无常的环境中寻找到适合自己的生存方式。正如庄子所提倡的“无为而治”,意味着在顺其自然的基础上,寻找最佳的...
但市场变化无常,企业家的聪明才智和即兴决策能力同样重要。企业应当建立基于数据的计划制定机制,同时允许领导者和员工在必要时发挥聪明才智,灵活应对市场变化。 第三,钱与“道”之间的矛盾,揭示了企业不仅要有...
7. 成语使用:第七题中,①“白云苍狗”比喻世事变化无常,用在此处不恰当;②“前尘往事”指过去的经历,使用正确;③“郁积”指长时间积压,与“感慨万千”搭配合理。因此,正确答案是包含②③的选项。 总结:这...
据他分析,“倏”有快速变化的意思,因此“鸟”在卜辞中可能表示一种变化无常的状态。特别是“卯鸟”一词,李学勤认为可能与埋鸟于坎穴的祭祀活动有关。然而,他的观点同样遇到了难题,因为卜辞并未说明具体使用了哪...
8. **动态适应性**:无线环境变化无常,因此,通信系统需要具备动态适应性,能够根据当前网络状况调整策略,如自动切换传输模式、改变功率水平等。 9. **网络同步**:在无线协作网络中,各节点间的精确时间同步是...