您的位置 首页 java

六年Java老鸟,写给1-3年程序员的几点关于java常量的踩坑总结

1、背景

在我的日常工作中,时隔几日就会进行一次发版,来解决生产环境遇到的各种bug和优化,但是由于一些日积月累的原因,更新某些项目时,不可以对jar包进行整包替换,通常都是以包内的class单个替换,尽量让这套年迈的系统能够多挺些时日,但是在一次发版过程中,遇到了一点点小问题,我们只修改了常量类,所以当时只更新了这一个类,在测试过程中发现修改内容未生效,经过一番排查后发现是因为常量实用不当引发的问题,下面就针对这次踩坑的经历,讲一下 Java 中的常量以及避坑的措施。

2、什么是常量

常量是指在整个操作过程中其值保持不变的数据,通常在命令或程序中直接给出其值,用做常量的数据类型有数值型、字符型、日期型、逻辑型和货币型等类型。

3、java中的常量

在Java语言中,主要是利用final关键字来定义常量,通常我们会以 public static final 来修饰(编译时常量)。

     package com.kevin.test01;

    public class Const
    {
      public static final String sun = "SUN";
      public static final String supperFileType = "exe;jar;class";
    }
  

复制代码

4、实例调试

我们先写一个常量使用的一个实例

 package com.kevin.test01;

public class Const {
     public static final String sun = "SUN";
         public static final String supperFileType = "exe;jar;class";
}

  
 package com.kevin.test01;

public class Common {
    public static void main(String [] args){
         StringBuffer  txt = new StringBuffer();
        txt.append("支持的文件类型");
        txt.append(Const.supperFileType);
        System.out.println(txt.toString());
    }
}
  

运行结果如下:

六年Java老鸟,写给1-3年程序员的几点关于java常量的踩坑总结

我们通过反编译工具 jd-gui 来反编译这2个class,来看看被编译后的内容是什么样的

先看看 Const 类的内容,这里没什么问题。

六年Java老鸟,写给1-3年程序员的几点关于java常量的踩坑总结

我们再看看引用常量的Common类,我们发现 反编译 后,在引用常量的地方竟然不是常量名称,而是常量的值,如果我们在代码中有很多地方以这种方式引用常量的话,那就只能对jar包进行整包更新了,而且也增加里出现其他问题的风险,那么怎么规避在无意中挖了这种坑或者踩了这种坑呢。

六年Java老鸟,写给1-3年程序员的几点关于java常量的踩坑总结

5、关于常量使用的建议之一

1、在引用常量时不要直接引用常量名,而是再常量类中加入get方法。

 package com.kevin.test01;

public class Const {
     static final String sun = "SUN";
     static final String supperFileType = "exe;jar;class";
     public static String getConst(String constName){
        switch(constName){
            case "sun" :
                    return sun;
        case "supperFileType":
                    return supperFileType;
            default: 
                    return null;
            }
        }
}

  

在需要引用常量的地方,我们直接用常量类中的静态方法获取

 package com.kevin.test01;

public class Common {
    public static void main(String [] args){
        StringBuffer txt = new StringBuffer();
        txt.append("支持的文件类型");
        txt.append(Const.getConst("supperFileType"));
        System.out.println(txt.toString());
    }
}

  

以下是反编译后的内容,

六年Java老鸟,写给1-3年程序员的几点关于java常量的踩坑总结

六年Java老鸟,写给1-3年程序员的几点关于java常量的踩坑总结

反编译后,我们看到引用常量的地方,不再是常量值,而是调用了静态方法,这种方式就可以完美的避开直接引用带来的诸多不确定性问题,还有很多非常好的方法,等后续更文再仔细讲述。

最后

非常感谢各位小哥哥小姐姐们能看到这里,原创不易,如果你觉得本篇实操方法对你有用麻烦帮助 点个关注、点个赞、留言 都是支持(莫要白嫖)! 有补充有疑问欢迎评论区留言!!!!

我会每周定期分享6-7篇 操作系统、计算机网络、Java、分布式、数据库等干货精品原创文章 ,我们下篇文章见!

更多拓展资料推荐阅读 :

获取更多资源、知识分享、开源代码!

文章来源:智云一二三科技

文章标题:六年Java老鸟,写给1-3年程序员的几点关于java常量的踩坑总结

文章地址:https://www.zhihuclub.com/195038.shtml

关于作者: 智云科技

热门文章

网站地图