`

Java中变化无常的常量

    博客分类:
  • java
阅读更多
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
0
4
分享到:
评论

相关推荐

    Java中的“枚举类型

    ### Java中的“枚举类型”知识点详解 #### 一、引言 在Java编程语言中,枚举(Enum)作为一种特殊的类,其设计初衷是为了更好地处理一组固定不变的常量集合。相较于传统的使用`static final`字段来表示常量的做法...

    感受一下Java中的“枚举类型”

    ”,有这个疑问说明你已经摸索到了枚举类型的主要功能:以统一命名的常量来替换变化无常的直接量,这是毫无疑问是枚举的主要作用,在大多数情况下,用static final是足够的,所以N多知名的源码里我们会经常看到用...

    GOF设计模式详解

    Java中的接口和抽象类是实现灵活性和扩展性的重要手段,设计模式则通过实例展示它们的广泛应用,帮助开发者深化对这些概念的理解。 设计模式追求可重用性,挑战软件开发中变化无常的需求,试图找出不变的部分并将其...

    JavaSE技术入门

    编译和运行Java程序:在Java中,程序先被编译器编译成字节码,然后由Java虚拟机(JVM)解释执行。编译是通过javac命令完成的,而运行则是通过java命令来执行编译好的字节码文件。 JRE安装配置:Java运行环境(JRE)...

    CSP备考不完全指南,备考经验分享

    CSP的难度变化无常,有时会出现难一次、易一次的趋势。例如,作者提到的第21次考试就显著地提升了难度,不仅第二题开始考察算法,而且后续题目也相当具有挑战性,导致平均分大幅下降。相反,第22次考试则相对简单。...

    小中取大法_小中取大法_

    在营销决策中,这种策略尤其重要,因为市场变化无常,消费者行为难以预测,不确定因素众多。 小中取大法的基本思想是,决策者在每个可能的选择中,不是去寻找最好的结果,而是考虑最坏的结果,并选择在最坏情况下...

    高中语文优美语段摘抄.doc

    3. 生活哲学的理解:生活中的无奈与矛盾,如白天与黑夜的对比,揭示了生活的复杂性和变化无常,鼓励人们以积极的态度面对生活的起伏。 4. 青春主题的探讨:通过描绘青春期的感受,展现了青少年追求自由、独立及自我...

    高中教育教学改革联盟学校_高二语文上学期期中联考试题.doc

    - 论证中引用了《易经》的观点,说明了变化中的悲欢离合是自然规律,否极泰来,乐极生悲。 - 对于有情世界,文章以宝玉的情感世界为例,展示了情支撑着世界的艺术美感。 - 最后,虚空世界被阐述为一种永恒的真理...

    2024年中国中地球轨道天线行业市场深度评估及投资盈利预测报告.pptx

    然而,技术更新快速,市场变化无常,投资者需要时刻关注技术趋势、市场动态和政策变化,以规避风险。同时,市场竞争激烈,投资者需选择有技术优势、品牌影响力和良好发展前景的企业进行投资。 总结来说,中国中地球...

    高中语文必修全部必背课文.doc

    诗中的“氓”指的就是那个变化无常的男子,诗通过女子的口吻揭示了爱情的两面性,强调了女性在爱情中的被动地位和牺牲精神。诗中的“士之耽兮,犹可说也。女之耽兮,不可说也。”是经典名句,揭示了古代社会中男女...

    中学生《孙子兵法》读后感800字.docx

    3. **灵活应变**:《孙子兵法》认为战争形势变化无常,因此要求指挥者灵活应对。同样,在学习中,学生需要根据自己的进步和外部环境的变化调整学习计划,善于创新和思考。 4. **道德与领导力**:孙子提到“道”,即...

    安全技术-网络信息-随机路由在无线传感器网络中的研究与应用.pdf

    由于WSN节点经常面对变化无常的外部环境,随机路由能通过在多个节点间动态分配负载,增加网络的灵活性和鲁棒性。而且,随机路由还有助于减轻网络瓶颈,提高数据传输的可靠性。不过,随机路由也有可能导致数据传输的...

    如何打造你的核心竞争力.zip

    5. 代码能力:精通至少一到两种编程语言,如Java、Python或C++,并熟练使用数据结构和算法,这是IT从业者的基本功。同时,了解版本控制工具如Git,以及开发框架如React或Angular,也是必不可少的。 6. 问题解决与...

    2020年高中语文第3课老人与海课时作业5含解析新人教版必修3

    从给定的文件内容来看,主要涉及的是对高中语文教材中《老人与海》这篇课文的理解与分析。本文将从标题、描述以及部分内容出发,详细阐述其中所包含的知识点。 ### 1. 《老人与海》的核心主题 《老人与海》是美国...

    2015_2016高中语文第5单元庄子蚜5恶乎往而不可课时作业新人教版选修先秦诸子蚜.doc

    庄子哲学的现实意义在于,它能够引导学生在复杂纷扰的现代社会中保持一颗平和、宁静的内心,学会在变化无常的环境中寻找到适合自己的生存方式。正如庄子所提倡的“无为而治”,意味着在顺其自然的基础上,寻找最佳的...

    企业管理中的八对矛盾.doc

    但市场变化无常,企业家的聪明才智和即兴决策能力同样重要。企业应当建立基于数据的计划制定机制,同时允许领导者和员工在必要时发挥聪明才智,灵活应对市场变化。 第三,钱与“道”之间的矛盾,揭示了企业不仅要有...

    高中三年级语文周测试题(十二).doc

    7. 成语使用:第七题中,①“白云苍狗”比喻世事变化无常,用在此处不恰当;②“前尘往事”指过去的经历,使用正确;③“郁积”指长时间积压,与“感慨万千”搭配合理。因此,正确答案是包含②③的选项。 总结:这...

    释卜辞中的“鸟”.pdf

    据他分析,“倏”有快速变化的意思,因此“鸟”在卜辞中可能表示一种变化无常的状态。特别是“卯鸟”一词,李学勤认为可能与埋鸟于坎穴的祭祀活动有关。然而,他的观点同样遇到了难题,因为卜辞并未说明具体使用了哪...

    网络游戏-多个节点的无线协作中继网络中的信息通信系统和方法.zip

    8. **动态适应性**:无线环境变化无常,因此,通信系统需要具备动态适应性,能够根据当前网络状况调整策略,如自动切换传输模式、改变功率水平等。 9. **网络同步**:在无线协作网络中,各节点间的精确时间同步是...

Global site tag (gtag.js) - Google Analytics