如何让在JAVA中定义常量池

首先看示例:

  1. /**
  2. * Method One
  3. */
  4. interface ConstantInterface {
  5. String SUNDAY = "SUNDAY";
  6. String MONDAY = "MONDAY";
  7. String TUESDAY = "TUESDAY";
  8. String WEDNESDAY = "WEDNESDAY";
  9. String THURSDAY = "THURSDAY";
  10. String FRIDAY = "FRIDAY";
  11. String SATURDAY = "SATURDAY";
  12. }
  13. /**
  14. * Method Two
  15. */
  16. enum ConstantEnum {
  17. SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
  18. }
  19. /**
  20. * Method Three
  21. */
  22. class ConstantClassField {
  23. public static final String SUNDAY = "SUNDAY";
  24. public static final String MONDAY = "MONDAY";
  25. public static final String TUESDAY = "TUESDAY";
  26. public static final String WEDNESDAY = "WEDNESDAY";
  27. public static final String THURSDAY = "THURSDAY";
  28. public static final String FRIDAY = "FRIDAY";
  29. public static final String SATURDAY = "SATURDAY";
  30. }
  31. /**
  32. * Method Four
  33. * http://www.ibm.com/developerworks/cn/java/l-java-interface/index.html
  34. */
  35. class ConstantClassFunction {
  36. private static final String SUNDAY = "SUNDAY";
  37. private static final String MONDAY = "MONDAY";
  38. private static final String TUESDAY = "TUESDAY";
  39. private static final String WEDNESDAY = "WEDNESDAY";
  40. private static final String THURSDAY = "THURSDAY";
  41. private static final String FRIDAY = "FRIDAY";
  42. private static final String SATURDAY = "SATURDAY";
  43. public static String getSunday() {
  44. return SUNDAY;
  45. }
  46. public static String getMonday() {
  47. return MONDAY;
  48. }
  49. public static String getTuesday() {
  50. return TUESDAY;
  51. }
  52. public static String getWednesday() {
  53. return WEDNESDAY;
  54. }
  55. public static String getThursday() {
  56. return THURSDAY;
  57. }
  58. public static String getFirday() {
  59. return FRIDAY;
  60. }
  61. public static String getSaturday() {
  62. return SATURDAY;
  63. }
  64. }
  65. public class TestConstant {
  66. static final String day = "saturday";
  67. public static void main(String[] args) {
  68. System.out.println("Is today Saturday?");
  69. System.out.println(day.equalsIgnoreCase(ConstantInterface.SATURDAY));
  70. System.out.println(day.equalsIgnoreCase(ConstantEnum.SATURDAY.name()));
  71. System.out.println(day.equalsIgnoreCase(ConstantClassField.SATURDAY));
  72. System.out.println(day.equalsIgnoreCase(ConstantClassFunction
  73. .getSaturday()));
  74. }
  75. }

方法一采用接口(Interface)的中变量默认为static final的特性。

方法二采用了Java 5.0中引入的Enum类型。

方法三采用了在普通类中使用static final修饰变量的方法。

方法四类似方法三,但是通过函数来获取常量。

首先定义全局变量似乎有违Java的面向对象的封装特性,增加的耦合。所以最佳的方法是避免定义全局变量。如果是参数等,可以写入配置文件。如果实在是必须的,方法二是最为推荐的。方法三是大家都能想到的,非常的直观。方法一和方法三本质上一样。方法四提供了灵活性,具体参考引用【1】。

时间: 2024-10-14 04:41:28

如何让在JAVA中定义常量池的相关文章

日常总结の关于Java中的常量池技术

一.相关概念 什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量.实例变量和局部变量,分别表示三种类型的常量. Class文件中的常量池 简单讲解一下class文件的结构,开头的4个字节是class文件魔数,用来标识这是一个class文件,说白话点就是文件头,既:CA FE BA BE. 紧接着4个字节是java的版本号,这里的版本号是34,因为笔者是用jdk8编译的,版本号的高低和jdk版本的高低相对应,高版本可以兼容低版本,但低版本无法执

Java中定义常量方法及建议(Class/Interface)

Class定义常量方法(推荐方法) //final修饰符 public final class Constants { //私有构造方法 private Constants() {} public static final int ConstantA = 100; public static final int ConstantB = 100; ...... } 采用“类.常量名”方法进行调用.需要私有化构造方法,避免创建该类的实例.同时不需让其他类继承该类. 如果多处需要访问工具类中定义的常量

Java中字符串常量池的陷阱

public class TestCase { static String ab = "ab"; static String getA() { return "a"; } static String getAB() { return "ab"; } public static void main(String[] args) { // 1 String _ab = new String("ab"); System.out.pr

JAVA中定义常量的3种方式

1.最古老的 //未处理 public static final int PROCESS_STATUS_UNTREATED = 0; //已接收 public static final int PROCESS_STATUS_ACCPECTED = 1; //已处理 public static final int PROCESS_STATUS_PROCESSED = 2; 2.改进版的 public static final class PROCESS_STATUS{ //未处理 public s

Java中定义常量(Constant)

/** * Method One */ interface ConstantInterface { String SUNDAY = "SUNDAY"; String MONDAY = "MONDAY"; String TUESDAY = "TUESDAY"; String WEDNESDAY = "WEDNESDAY"; String THURSDAY = "THURSDAY"; String FRIDAY

如何在Java中定义常量(Constant)

/** * Method One */interface ConstantInterface { String SUNDAY = "SUNDAY"; String MONDAY = "MONDAY"; String TUESDAY = "TUESDAY"; String WEDNESDAY = "WEDNESDAY"; String THURSDAY = "THURSDAY"; String FRIDAY

19、java内存分配 常量池详解

在class文件中,“常量池”是最复杂也最值得关注的内容. Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int.long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如: 类和接口的全限定名: 字段的名称和描述符: 方法和名称和描述符. 在C语言中,如果一个程序要调用其它库中的函数,在连接时,该函数在库中的位置(即相对于库文件开头的偏移量)会被写在程序中,在运行时,直接去这个地址调用函数: 而在Jav

Java堆/栈/常量池以及String的详细详解(转)------经典易懂系统

一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象. ------最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 堆栈(stack).位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持.堆栈指针若向下移动,则分配新的内存:若向上移动,则释放那

Java中的线程池

综述 在我们的开发中经常会使用到多线程.例如在Android中,由于主线程的诸多限制,像网络请求等一些耗时的操作我们必须在子线程中运行.我们往往会通过new Thread来开启一个子线程,待子线程操作完成以后通过Handler切换到主线程中运行.这么以来我们无法管理我们所创建的子线程,并且无限制的创建子线程,它们相互之间竞争,很有可能由于占用过多资源而导致死机或者OOM.所以在Java中为我们提供了线程池来管理我们所创建的线程. 线程池的使用 采用线程池的好处 在这里我们首先来说一下采用线程池的