`

Java中的Constants类

    博客分类:
  • Java
 
阅读更多

Constants类即常量类是将一些常用的变量集合到一个地方的类,常量应该定义在类中,而不是接口中(见Effective Java 2nd Edition, Item19),如果定义的常量是int类型的,可使用Enum类来代替(见Effective Java 2nd Edition, Item30),然而,有些常量类,比如String类型的常量类,可能不太适合使用Enum类来代替。

不像Enum类,系统在编译后自动生成了values方法,返回所有Enum类中常量的数组,自行定义的常量类没有这样的方法,如果定义的常量过多,可能得到所有常量的数组比较麻烦,可通过Java的反射机制得到这个类的所有常量数组:

 

  1. public static String[] values() {  
  2.     Field[] fields = Constants.class.getFields();  
  3.     String[] s = new String[fields.length];  
  4.     for(int i=0,n=fields.length; i<n; i++) {  
  5.         try {  
  6.             Field f = fields[i];  
  7.             s[i] = (String) f.get(null);  
  8.         } catch (Exception ex) {  
  9.             Logger.getLogger(Constants.class.getName()).log(Level.SEVERE, null, ex);  
  10.         }  
  11.     }  
  12.     return s;  
  13. }  


也可定义一个方便的返回Set的方法:

 

 

  1. public static Set<String> asSet() {  
  2.     return new HashSet<String>(Arrays.asList(values()));  
  3. }  

 

完整的代码,一个完整的Constants类的模板:

 

  1. public class Constants {  
  2.       
  3.     public static final String USER_HOME = "user.home";  
  4.     public static final String USER_DIR = "user.dir";  
  5.     public static final String OS_NAME = "os.name";  
  6.       
  7.     private Constants(){}  
  8.       
  9.     public static String[] values() {  
  10.         Field[] fields = Constants.class.getFields();  
  11.         String[] s = new String[fields.length];  
  12.         for(int i=0,n=fields.length; i<n; i++) {  
  13.             try {  
  14.                 Field f = fields[i];  
  15.                 s[i] = (String) f.get(null);  
  16.             } catch (Exception ex) {  
  17.                 Logger.getLogger(Constants.class.getName()).log(Level.SEVERE, null, ex);  
  18.             }  
  19.         }  
  20.         return s;  
  21.     }  
  22.       
  23.     public static Set<String> asSet() {  
  24.         return new HashSet<String>(Arrays.asList(values()));  
  25.     }  
  26.       
  27.     public static void main(String[] args) {  
  28.         System.out.println("values="+Arrays.asList(values()));  
  29.         System.out.println("set="+asSet());  
  30.     }  
  31. }  


常量类可通过import static导入,个人更喜欢把常量类和Utils工具类放在一块,都可以通过import static导入,然而,常量类也有一些缺陷,在编译时如果修改了常量类,编译时依赖常量类的其他类文件并不重新编译,所以在开发过程中,修改常量类后尽量先对项目进行clean,然后build,这也是不建议使用接口定义常量类的主要原因,调用接口的客户API不可能在接口重新发布时都进行编译。

 

转自:http://blog.csdn.net/zfqjava/article/details/7066260

 

分享到:
评论

相关推荐

    JavaConstants:测试Java中常量的各种定义和使用方法

    您如何在Java中定义和使用常量? Internet上的大多数建议具有以下意见: 为类中的常量声明public static final 不要将接口用于常量 定义常量的最常见方法是在类中使用public static final 。 然后,可以使用...

    classfile_constants_java_

    Java 类文件常量池(Classfile Constants)是Java字节码文件(.class文件)结构中的一个重要组成部分。这个部分存储了类和接口的各种元数据,包括但不限于类名、方法名、字段名、字符串、常量数值等。这些常量在编译...

    Constants.java

    Constants.java

    JAVA高级编程中Enum枚举

    在Java编程语言中,`Enum`(枚举)是一种特殊的类类型,用于定义固定的、预定义的常量集合。它们在程序设计中扮演着重要的角色,特别是在需要表示一组固定值时,如状态、颜色、星期等。本资源包提供了一些关于`Enum`...

    static 在java中的作用

    `static`是Java语言中的一个关键字,主要用来修饰类成员(变量、方法或代码块),其核心功能在于定义类级别的共享属性。通过使用`static`,可以实现对类属性和方法的共享访问,而无需创建类的实例。这在实际编程中...

    Java中的常量如何避免反模式Java开发Java经验技巧

    - 在Java中,常量通常定义在`final`修饰的静态字段中,位于一个专门的`Constants`或`Config`类中。这样做有助于代码的组织,使得常量的查找和使用更加方便。 2. **命名规范**: - 常量的命名应遵循大写驼峰命名法...

    java类与方法命名规则

    以下是对标题“java类与方法命名规则”以及描述中的相关知识点的详细说明: 1. **类(Class)命名规则**: 类在Java中是面向对象编程的基础,用于封装数据和行为。类名应清晰地反映其代表的对象或概念。按照Java的...

    java常用英文单词

    在Java中,字符串是对象,属于 `String` 类。 6. **数组(Array)**:存储相同类型元素的集合,如 `int[] numbers = new int[5];` 7. **循环(Loop)**:控制程序重复执行某段代码,如 `for`、`while` 和 `do-while`...

    java11-jvm白皮书_java_govwe_

    此外,JEP 315(JVM Constants API)为开发者提供了一种更简单的方式访问和操作JVM常量池,简化了反射和类加载器的实现。 总的来说,Java 11的JVM在很多方面都有所改进,包括垃圾收集、模块化、HTTP客户端、性能...

    Java15的JDK环境

    Java 15引入了密封类的概念,这是一种新的访问修饰符,允许开发者限制哪些其他类可以扩展或实现特定的类或接口。这有助于增强代码的封装性和安全性。 2. **开关表达式增强(Switch Expressions Enhancements)**:...

    JAVA 3D 魔方源代码

    5. 可能还有一些其他的辅助类,如`Constants.java`(存储常量)或`Utils.java`(通用工具方法)。 在学习这个源代码的过程中,你可以深入了解Java 3D API的使用,包括如何创建3D对象、如何进行3D变换、如何处理用户...

    java 双色球项目

    7. `Constants.java` - 存储游戏中固定的参数,如红球数量、蓝球数量、中奖规则等。 通过这个项目,学习者可以了解到以下知识点: 1. Java基础语法:变量声明、条件语句、循环结构、函数定义等。 2. 随机数生成:...

    java接口实例

    在Java编程语言中,接口(Interface)是一种定义行为规范的抽象类型,它允许类实现多个不同的行为,体现了Java的多态性。接口是完全抽象的,不包含任何方法的实现,只有方法签名、常量定义以及默认方法。下面将详细...

    Java 7 A Beginners Tutorial

    在Java语言基础章节中,讲解了ASCII和Unicode编码、分隔符、基本数据类型(Primitives)、变量(Variables)、常量(Constants)、字面量(Literals)、基本类型转换(Primitive Conversions)、运算符(Operators)...

    java+ffmpeg视频、音频转码

    这个文件很可能是Java程序的一个类,用于实现视频转换功能。它可能包含启动FFmpeg进程、设置参数、处理输入输出文件、错误处理等核心代码。例如,使用`Runtime.getRuntime().exec()`方法执行FFmpeg命令,或者使用...

    java接口使用实例源码

    在Java编程语言中,接口(Interface)是一种定义行为规范的关键概念,它允许类实现多个不同的行为,体现了面向接口编程的设计原则。本实例源码聚焦于Java接口的实际运用,旨在帮助开发者深入理解接口的工作机制和...

    Java小程序代码

    `Constants`和`Constants2`类展示了如何在Java中声明和使用常量。`final`关键字用于声明不可变的变量,即常量。`Constants`类中的`CM_PER`常量被用于计算圆的面积,展示了如何将数学常数作为常量使用,以提高代码的...

    完整版 南京理工大学 java语言程序设计教程 第3章 Java概述-1(共25页).ppt

    3. 常量(Constants):Java中通过关键字final声明常量,一旦赋值后不可更改。此外,Java还使用Unicode编码系统,支持多种字符。 4. 控制流(Control Flow):控制流包括条件语句(if、if-else)、循环(while、for...

    JAVA100例之实例54 使用语句预处理

    例如,我们可以使用@ConditionalOnClass或@ConditionalOnBean等Spring Boot的注解,来确保某些组件只在类路径中有特定类或者存在特定bean的情况下才生效。 在"JAVA100例之实例54"中,可能包含了一个展示如何使用...

    Java语言命名规范

    例如,类`MyClass`应保存在名为`MyClass.java`的文件中。 三、文件组织 1. Java源文件:每个Java源文件只应包含一个公共类,且该类名应与文件名相同。非公共类可以与文件中的其他非公共类共享文件。 四、缩进排版...

Global site tag (gtag.js) - Google Analytics