Java中常量定义的几种方式

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

相关推荐

resolution解决,决心,分辨率
365bet亚洲最大网投

resolution解决,决心,分辨率

⌛ 09-20 👁️ 6588
不懂就问 会员开港服好 还是日服好?
365体育旧版本怎么下载

不懂就问 会员开港服好 还是日服好?

⌛ 09-08 👁️ 2350
蒙多蒙多 皮肤
365bet亚洲最大网投

蒙多蒙多 皮肤

⌛ 06-24 👁️ 1625
韩国球星孙兴慜确认今夏离开热刺,俱乐部称之为“真正的传奇”
致青春剧情介绍
彩票365

致青春剧情介绍

⌛ 08-13 👁️ 8820
2024秋新学期上海教材配套音视频下载提取码最新版
365体育旧版本怎么下载

2024秋新学期上海教材配套音视频下载提取码最新版

⌛ 11-02 👁️ 8745
【进口宝马(进口)】进口宝马(进口)汽车报价,车型大全,图片
韩束蓝藻和墨菊哪个好
彩票365

韩束蓝藻和墨菊哪个好

⌛ 12-29 👁️ 2608
煙字的意思解释,煙的读音怎么读,部首,笔顺,笔画