编程中使用常量的优点:

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

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

Java中常量定义的几种方式相关推荐

  1. java 常量定义_Java中常量定义的几种方式

    编程中使用常量的优点: 常量提取出来有利于代码阅读,而且下次再做这种判断不用手写或复制并且提高代码的复用率,方便修改,直接通过常量类就能得到.不过我觉得提取出来并不会有利于代码性能提升,因为常量分配在 ...

  2. java直接调用复制文件,java中文件复制的4种方式,java文件的复制

    java中文件复制的4种方式,java文件的复制 今天一个同事问我文件复制的问题,他一个100M的文件复制的指定目录下竟然成了1G多,吓我一跳,后来看了他的代码发现是自己通过字节流复制的,定义的字节数 ...

  3. Java中实现接口的三种方式您造吗?

    本文介绍了Java中实现接口的三种方式:常规实现方式.匿名内部类和 Lambda表达式实现方式.希望已经了解的同学可以重新温习一下,不了解的同学则从中受益! Java中接口最常规的实现方式 同学们都会 ...

  4. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  5. JAVA中集合输出的四种方式

    在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello {public stati ...

  6. java中Map遍历的四种方式

    java中Map遍历的四种方式 在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方 ...

  7. java中实现多线程的三种方式

    java中实现多线程的三种方式 1.实现多线程的方法: 在java中实现多线程的两途径:继承Thread类,实现Runable接口(Callable) 2.继承Thread类实现多线程: ​ 继承类T ...

  8. java中Map遍历的三种方式

    Java中Map遍历的三种方式 前言 一:在for循环中使用entries实现Map的遍历: 二:在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能 ...

  9. Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

最新文章

  1. PostgreSQL连接池pgbouncer的使用
  2. linux系统编程快速定位头文件的技巧之强大的grep命令
  3. mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI
  4. (十五)java B2B2C 多级Springboot多租户电子商城系统 Springboot整合RabbitMQ
  5. hdu-1576(A/B)
  6. Burpsuite工具的使用
  7. 【OpenGL从入门到精通】Shader专题
  8. 梦想还是要有的,万一实现了呢
  9. wordpress主题 阿里百秀XIU v7.7版本
  10. 极智AI | 量化实现分享一:详解 min-max 对称量化算法实现
  11. MATLAB 常用语法、函数
  12. Ceph新建monitor或者osd报错:use --overwrite-conf to overwrite
  13. 苹果12系统链接到服务器超时,苹果iphone12无法连接wifi怎么回事 解决方法分享
  14. 最全iOS12捷径库收集整理,iOS12捷径推荐
  15. 三分学习(解决凸函数or凹函数的极值)
  16. torch.bmm()验证
  17. linux 命令行获取时间,【Linux】让命令提示符显示日期和时间
  18. RTCP Receiver Report(RR)相关
  19. Jquery字符UrlEncode 编码、解码 --C#UrlEncode
  20. ACA-PEG-MAL,丙烯酰胺PEG马来酰亚胺

热门文章

  1. 虚拟机VMWare“提示:软件虚拟化与此平台上的长模式不兼容”的解决方法
  2. java arraylist优点_Java中各种集合的特点总结
  3. guice google_与Google Guice的动手实践
  4. 大二上学数据结构和操作系统_毕业后的工作比上学要重要得多。 这是数据。...
  5. 【Linux学习笔记】 -- 基本Shell命令
  6. idea打开web项目之后一直闪烁
  7. java mvc view_对Springmvc view层的理解
  8. tomcat的startup.bat闪退问题解决
  9. Linux入门(四)
  10. css :after或:before写小三角形