Java中常量定义的几种方式

编程中使用常量的优点:

  常量提取出来有利于代码阅读,而且下次再做这种判断不用手写或复制并且提高代码的复用率,方便修改,直接通过常量类就能得到。不过我觉得提取出来并不会有利于代码性能提升,因为常量分配在内存的常亮池中,所以内存不会出现多个相同常量字符串。总的来说提取常量主要是为了避免魔法数字和硬编码等,提高代码的可读性。

1、Interface定义常量

  接口常量,写起来方便,看着简洁。 在接口中可以通过内部类来实现接口分类,这样代码就显得更简洁。

/**
 * @program: java_demo
 * @description:
 * @author: Mr.Walloce
 * @create: 2019/06/18 15:14
 **/
public interface inConstants {

    //响应状态成功
    public static final Integer REP_STATUS_SUCCESS = 200;
    //响应状态错误
    public static final Integer REP_STATUS_ERROR = 500;

    public class testConstanA {
        public static final String TEST_CONSTANT_A = 'a';
    }
}

2、Class定义常量

  采用“类.常量名”方法进行调用。需要私有化构造方法,避免创建该类的实例。同时不需让其他类继承该类。如果多处需要访问工具类中定义的常量,可以通过静态导入(static import)机制,避免用类名来修饰常量名。普通类中可以通过提供get的方法来提供调用。

/**
 * @program: java_demo
 * @description:
 * @author: Mr.Walloce
 * @create: 2019/06/18 15:30
 **/
public final class ClazConstants {
    //私有构造方法
    private ClazConstants() {}

    public static final int ConstantA = 100;

    public static final int ConstantB = 200;
}

interface中定义常量方法生成的class文件比第一种方法的class文件更小, 且代码更简洁, 效率更高。

以上接口和普通类实现的常量方式存在一些争议,具体的比较可以参考:Java Interface 是常量存放的最佳地点吗?

3、Enum定义常量

/**
 * @program: java_demo
 * @description:
 * @author: Mr.Walloce
 * @create: 2019/06/18 15:30
 **/
public enum EnumConstants {

    MONDAY('MONDAY', '一'),
    TUESDAY('TUESDAY', '二'),
    WEDNESDAY('WEDNESDAY', '三'),
    THURSDAY('THURSDAY', '四'),
    FRIDAY('FRIDAY', '五'),
    SATURDAY('SATURDAY', '六'),
    SUNDAY('SUNDAY', '日');

    private final String value;
    private final String name;

    EnumConstants(String name, String value) {
        this.value = value;
        this.name = name;
    }

    public String getValue() {
        return value;
    }

    public String getName() {
        return name;
    }
}

常量和枚举的区别:

  常量中存在的缺点:

  ① 常量作为参数时,是String,int等弱类型,开发员传入没有在常量接口里定义的值,这个问题无法通过编译器发现;

  ② 由于开发员可以直接写常量值, 所以不能用==对比,只能用equals对比,不能优化性能;

  ③ 编译时,是直接把常量的值编译到类的二进制代码里,常量的值在升级中变化后,需要重新编译所有引用常量的类,因为里面存的是旧值。

  枚举的有点:

  ① 私有构造函数,避免被继承和扩展;

  ② 定义方法的参数时,必须用枚举常量类类型;

  ③ 常量值地址唯一,可以用==直接对比,性能会有提高;

  ④  编译时,没有把常量值编译到代码里,即使常量的值发生变化也不会影响引用常量的类;

  根据以上的优缺对比,显然得知枚举的方式更适合项目中使用。但是就以通常的写法来看,枚举的方式是最繁琐的,编程上不够简便。所以综上所述如果就便捷而言推荐使用Class的方式定义常量,若就性能和安全性来说推荐使用枚举的方式定义常量。

参考内容:

https://my.oschina.net/dyyweb/blog/617493

https://www.cnblogs.com/wanqieddy/p/9051568.html

(0)

相关推荐

  • Java编程技巧之样板代码

    前言 北宋科学家沈括在<梦溪笔谈>第十八卷<技艺>中这样描述"活字印刷术": 庆历中,有布衣毕昇,又为活版.其法用胶泥刻字,薄如钱唇,每字为一印,火烧令坚- ...

  • Go map定义的几种方式以及修改技巧

    原文链接:http://www.zhoubotong.site/post/24.html 直入正题,我们看下以下代码: package mainimport ( "encoding/json ...

  • colab中切换路径的两种方式

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/colab中切换路径的两种方式 作者:融水公子 rsgz Colab教程 Colab教程 http://www.rsgz.top/post/410 ...

  • 英语中表示强调的7种方式,你知道几种?

    为了强调英语句子中的某一成份,强调方式是多种多样的,现将它们归纳如下: 1.用形容词"very","single"等表示强调 例句: They fought a ...

  • PLC顺序控制中编制梯形图的四种方式,你都会?

    可编程控制器PLC外部接线简单方便,它的控制主要是程序的设计,编制梯形图是最常用的编程方式,使用中一般有经验设计法,逻辑设计法,继电器控制电路移植法和顺序控制设计法,其中顺序控制设计法也叫功能表图设计 ...

  • 技术干货:嵌入式中参数存储的一种方式

    导读: 如果有几个设置参数需要存储到Flash中,我们一般会怎么存储呢?将不同的参数都存储到不同的页中,还是将这几个参数捆绑成一种结构体,每次修改都同时写入一次呢? 如果有几个设置参数需要存储到Fla ...

  • 英语中表示强调的8种方式,你知道几种?

    为了强调英语句子中的某一成份,强调方式是多种多样的,现将它们归纳如下: 1.用形容词"very","single"等表示强调 例句: They fought a ...

  • 在Power BI中制作时间表的两种方式

    日常分析用到的数据,有些时间维度,不仅仅只是日期,更细化到时间,包含时分秒,对这些数据的分析,仅仅利用日期表,就无法实现对小时.分钟.甚至是秒级粒度的分析. 如果需要按更细的时间粒度分析,直接的做法, ...

  • “极限”定义的两种方式:“二逼青年式”和“严谨数学家式”

    无穷的概念,是人类数学的伟大发现,无穷是解决复杂问题的利器工具,而无穷总要收归到有穷,才能求解问题,于是就有了极限.所以,极限是研究无穷小的工具. 研究极限的概念,一个经典的开始例子,便是关于运动速度 ...

  • Java中验证编码格式的一种方法

    Java中验证编码格式的一种方法