Java中常量定义的几种方式

news/2024/7/5 5:03:12

编程中使用常量的优点:

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

 

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

 

转载于:https://www.cnblogs.com/yin1361866686/p/11045857.html


http://lihuaxi.xjx100.cn/news/250130.html

相关文章

【编程题】【Scratch二级】2019.03 绘制方形螺旋

绘制方形螺旋 方形螺旋是我们常见的一种螺旋形状,其特点是连续的线段长度均匀增加,例如第一条线段长度为5,第二条长度为10,第三条长度为15,以此类推。 现在请编写程序实现下图中的图案效果: 1. 准备工作 (1)隐藏小猫角色。 2. 功能实现 (1)当绿旗被点击时,以舞…

集成公司内部的多个子系统(兼容B/S和C/S),实现单点登录功能的多系统的统一入口功能...

有一句话也挺有意思的,一直在模仿但从未超越过,文章里的技术也都是相对简单的技术,但是实实在在能解决问题,提高效率。现在人都懒得瞎折腾,能多简单就多简单,谁都不希望总是做一些重复的工作,我…

SVN提示被锁定的解决方法(转)

1、(常用)出现这个问题后使用“清理”即"Clean up"功能,如果还不行,就直接到上一级目录,再执行“清理”,然后再“更新”。 2、(没试过)有时候如果看到某个包里面的文件夹没…

【编程题】【Scratch二级】2019.03 垃圾分类

垃圾分类 垃圾分类已经成为我们日常生活中很重要的一部分,这对于环境保护、资源回收利用具有重要意义。 下面我们做一个简单的垃圾分类互动游戏。 1. 准备工作 (1)导入背景库中的“Mural”,并编辑该背景,增加如下图中的两个垃圾桶,注明“可回收垃圾”和“不可回收垃圾…

对于装饰器Decorator的理解

装饰器是用来描述函数,记录日志,提供信息的函数,是一个为了更好的服务主函数的副函数: 详情还需查看:廖雪峰装饰器 关键在于:【import functools是导入functools模块。模块的概念稍候讲解。现在&#xff0c…

CTO(首席技术官)

CTO(首席技术官)英文Chief Technology Officer,即企业内负责技术的最高负责人。这个名称在1980年代从美国开始时兴。起于做很多研究的大公司,如General Electric,AT&T,ALCOA,主要责任是将科…

×××的简介

及其配置示例 的定义 虚拟专网(-VIRTUAL PRIVATE NETWORK)指的是在公用网络上建立专用网络的技术。之所以称为虚拟网主要是因为整个网络的任意两个节点之间的连接并没有传统专网所需的端到端的物理链路,而是架构在公用网络服务商所提供的网络…

Go处理百万每分钟的请求

2019独角兽企业重金招聘Python工程师标准>>> I have been working in the anti-spam, anti-virus and anti-malware industry for over 15 years at a few different companies, and now I know how complex these systems could end up being due to the massive a…