`
- 浏览:
185474 次
- 性别:
-
- java枚举(enum)学习
- 来自:www.java1995.org 作者: 爪娃
- 2009-06-06 浏览(138) 评论(0) 发表评论
- 摘要: Java中的枚举是在JDK1.5才引进的,使用enum为关键字,是一种新的类型,允许用常量来表示数据片断。所有的枚举类型都是java.lang.Enum类的子类,枚举内的常量用‘,’分隔开,若后面还有语句,则最后一个常量后面要用‘;’,枚举...
- Java中的枚举是在JDK1.5才引进的,使用enum为关键字,是一种新的类型,允许用常量来表示数据片断。所有的枚举类型都是java.lang.Enum类的子类,枚举内的常量用‘,’分隔开,若后面还有语句,则最后一个常量后面要用‘;’,枚举中的常量默认都是public static final,这就是为什么枚举中的常量建议全大写的原因,虽然它默认是public static final,但你在声明常量时却不能显式使用public static final,否则编译器反而会报错误。枚举常量实际就是格举类型的实例,它的初始化是依靠java.lang.Enum类的构造方法来的,见下:
-
- Java代码
- 1.
- 2.
- 3. protected Enum(String name, int ordinal) {
- 4.
- 5. this.name = name;
- 6.
- 7. this.ordinal = ordinal;
- 8.
- 9. }
-
- 第一个枚举常量的值默认是0,其它的依次加1.
- 下面先看下简单的枚举类的定义:
- Java代码
- 1. public enum Colors{
- 2. RED,BLUE,GREEN,YELLOW,GRAY;
- 3.
- 4. }
-
- 下面看个简单的应用:
-
- Java代码
- 1. package com.iwtxokhtd.enums;
- 2.
- 3.
-
-
-
- 7. public enum Colors {
- 8.
- 9.
-
-
- 12. RED,
- 13. GREEN,
- 14. BLUE,
- 15. YELLOW,
- 16. GRAY;
- 17. }
- 18.
-
-
- 21. package com.iwtxokhtd.enums;
- 22.
- 23.
-
-
-
- 27. public class EnumTest {
- 28.
- 29. public static void printColor(Colors color){
- 30.
- 31. switch(color){
- 32. case RED:
- 33. System.out.println("这是红色");
- 34. break;
- 35. case GREEN:
- 36. System.out.println("这是绿色");
- 37. break;
- 38. case BLUE:
- 39. System.out.println("这是蓝色");
- 40. break;
- 41. case YELLOW:
- 42. System.out.println("这是黄色");
- 43. break;
- 44. case GRAY:
- 45. System.out.println("这是灰色");
- 46. break;
- 47. default:
- 48. System.out.println("其它色");
- 49. }
- 50. }
- 51. public static void main(String []args){
- 52.
- 53. printColor(Colors.BLUE);
- 54. }
- 55. }
-
-
- 使用EnumMap
- EnumMap是为枚举类型定做的Map实现,它比其它的Map实现能更高效地完成枚举类型实例到值的映射,EnumMap内部使用枚举类型的ordinal()方法得到当前实例的声明次序。
- 见示例:
-
- Java代码
- 1.
-
-
- 4. package com.iwtxokhtd.enums;
- 5.
- 6. import java.util.EnumMap;
- 7.
- 8.
-
-
-
- 12. public class EnumMapTest {
- 13.
- 14. private EnumMap<Colors,String> colors=new EnumMap<Colors,String>(Colors.class);
- 15. public EnumMapTest(){
- 16. colors.put(Colors.RED, "红色");
- 17. colors.put(Colors.BLUE, "蓝色");
- 18. colors.put(Colors.GRAY, "灰色");
- 19. colors.put(Colors.GREEN, "绿色");
- 20. colors.put(Colors.YELLOW, "黄色");
- 21. }
- 22.
- 23. public String getColor(Colors color){
- 24. return colors.get(color);
- 25. }
- 26. public static void main(String []args){
- 27. System.out.println(new EnumMapTest().getColor(Colors.BLUE));
- 28. }
- 29.
- 30. }
-
- 枚举其实是个类,下面来看看枚举作为一个类的使用:
-
- 下面我们将以前的那些类定义放到一个类中,见代码:
-
-
- Java代码
- 1.
-
-
- 4. package com.iwtxokhtd.enums;
- 5.
- 6. import java.util.EnumSet;
- 7.
- 8.
-
-
-
- 12. enum AnotherColors{
- 13. RED,GREEN,BLUE,YELLOW,GRAY;
- 14. public String printColor(){
- 15. switch(this){
- 16. case RED:
- 17. return "这是红色";
- 18. case GREEN:
- 19. return "这是绿色";
- 20. case BLUE:
- 21. return "这是蓝色";
- 22. case YELLOW:
- 23. return "这是黄色";
- 24. case GRAY:
- 25. return "这是灰色";
- 26. default:
- 27. return "其它色";
- 28. }
- 29. }
- 30. }
- 31. public class OneClassTest {
- 32.
- 33. public static void main(String []args){
- 34.
- 35. for(AnotherColors color:EnumSet.allOf(AnotherColors.class)){
- 36. System.out.println("定义的颜色信息是:"+color.printColor());
- 37.
- 38. }
- 39. }
- 40. }
-
- 枚举类型也允许定义自己的构造方法如:
-
- Java代码
- 1.
-
-
- 4. package com.iwtxokhtd.enums;
- 5.
- 6. import java.util.EnumSet;
- 7.
- 8.
-
-
-
- 12. enum ConstructorEnum{
- 13. RED("red","红色"),
- 14. GREEN("green","绿色"),
- 15. BLUE("blue","蓝色"),
- 16. YELLOW("yellow","黄色"),
- 17. GRAY("gray","灰色");
- 18.
- 19.
- 20. private String color;
- 21. private String message;
- 22.
- 23. ConstructorEnum(String color,String message){
- 24.
- 25. this.color=color;
- 26. this.message=message;
- 27. }
- 28. public String getColor() {
- 29. return color;
- 30. }
- 31. public String getMessage() {
- 32. return message;
- 33. }
- 34. }
- 35. public class NewEnumTest {
- 36.
- 37. public static void main(String []args){
- 38. for(ConstructorEnum color:EnumSet.allOf(ConstructorEnum.class)){
- 39. System.out.println("颜色键为:"+color.getColor());
- 40. System.out.println("颜色值为:"+color.getMessage());
- 41. }
- 42. }
- 43. }
-
-
-
- 使用枚举类型注意事项:
- (1) 枚举类型不能使用extends关键字,但是可以使用implements关键字。这样我们可以把不同枚举类型共有的行为提取到接口中,来规范枚举类型的行为。
- (2) 枚举类型的自定义构造函数并不能覆盖默认执行的构造函数,它会跟在默认构造函数之后执行。
- (3) 枚举类型的自定义构造函数必须是私有的,但你不能显式加private,否则会出错
- (4)枚举类型中枚举常量的定义必须放在最上面,其后才能是变量和方法的定义。
-
- 下面学下枚举类的自定义方法,见代码:
-
-
- Java代码
- 1.
-
-
- 4. package com.iwtxokhtd.enums;
- 5.
- 6. import java.util.EnumSet;
- 7.
- 8.
-
-
-
- 12. enum MethodEnum{
- 13. RED{
- 14. public void printColor(){
- 15. System.out.println("红色");
- 16. }
- 17. },
- 18.
- 19. GREEN{
- 20. public void printColor(){
- 21. System.out.println("绿色");
- 22. }
- 23. },
- 24.
- 25. BLUE{
- 26. public void printColor(){
- 27. System.out.println("蓝色");
- 28. }
- 29. },
- 30.
- 31. YELLOW{
- 32. public void printColor(){
- 33. System.out.println("黄色");
- 34. }
- 35. },
- 36.
- 37. GRAY{
- 38. public void printColor(){
- 39. System.out.println("灰色");
- 40. }
- 41. };
- 42. public abstract void printColor();
- 43. }
- 44. public class MethodEnumTest {
- 45.
- 46.
- 47. public static void main(String []args){
- 48. for(MethodEnum color:EnumSet.allOf(MethodEnum.class)){
- 49. color.printColor();
- 50. }
- 51. }
- 52. }
-
-
- 下面来看下,如何通过相关的数据反过来查找枚举类中的项,解释见下面的代码:
- Java代码
- 1.
-
-
- 4. package com.iwtxokhtd.enums;
- 5.
- 6. import java.util.EnumSet;
- 7. import java.util.HashMap;
- 8. import java.util.Map;
- 9.
- 10.
-
-
-
- 14. enum SearchEnum{
- 15. RED(0),
- 16. GREEN(1),
- 17. BLUE(2),
- 18. YELLOW(3),
- 19. GRAY(4);
- 20.
- 21. private static final Map<Integer,SearchEnum> search=new HashMap<Integer,SearchEnum>();
- 22.
- 23. static{
- 24. for(SearchEnum color:EnumSet.allOf(SearchEnum.class)){
- 25. search.put(color.getI(), color);
- 26. }
- 27. }
- 28. private int i;
- 29. SearchEnum(int i){
- 30. this.i=i;
- 31. }
- 32. public int getI(){
- 33. return i;
- 34. }
- 35.
- 36. public static SearchEnum get(int i){
- 37. return search.get(i);
- 38. }
- 39. }
- 40. public class SearchEnumTest {
- 41.
- 42. public static void main(String []args){
- 43.
- 44. System.out.println(SearchEnum.get(2));
- 45. }
- 46. }
-
- 枚举的学习先到这里,注意:枚举在某些场合使用还是比较方便的,如:定义时间日期常量、颜色常量、身高离散常量、物品的尺寸等,但千万不要滥用。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
在编程中,`enum`(枚举)类型是用来定义一组命名的整数常量,它在C++中被广泛使用。然而,在某些情况下,我们可能会遇到`enum`类型的重定义问题,这通常发生在包含不同库或者头文件时,因为这些库可能已经定义了...
### C++中的枚举类型(Enum) 在C++编程语言中,枚举(`enum`)是一种用户定义的类型,它由一组具有整数值的命名常量组成。这些值可以被程序用来代替数字,使代码更具可读性,并且能够表示特定范围内的固定集合。 ...
Java枚举类型(Enum)是Java SE 5.0引入的一种新的数据类型,它为开发者提供了更为强大且安全的方式来表示一组常量。枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将...
OPC Enum 32-64 安装包是一款专为处理32位和64位操作系统设计的OPC组件,确保在不同系统环境下能稳定、高效地工作。 OPC Core Component是OPC技术的核心组成部分,它提供了基本的OPC服务,如数据访问(OPC DA,OPC ...
其中一个常见的需求是将RadioButton组与枚举类型(Enum)进行绑定,以便用户通过选择不同的RadioButton来设置某个属性的值。枚举是一种强大的数据类型,它允许我们定义一组具有特定名称的常量,这些常量通常代表某种...
枚举(enum)在编程语言中是一种非常基础且重要的数据类型,它允许程序员定义一组预定义的常量,这些常量通常表示特定的值或状态。在这个“enum 结构分析源码”资源中,我们主要关注的是C语言中的枚举使用和实现。...
然而,对于enum(枚举)类型,由于它不是Android系统默认支持的数据传递类型,所以在使用Intent传递enum时需要特别处理。本教程将详细讲解enum类型如何与Intent结合,以及在不同情况下如何实现数据传输。 首先,让...
"Java Enum 枚举学习资料" Java Enum 枚举学习资料是 Java 编程语言中的一种特殊类型,它主要用来实现一组固定的常量。 Enum 枚举类型是 Java 5 中引入的一种新特性,旨在解决传统的 int 枚举常量的缺陷。 1. 枚举...
选项Swift软件包,用于更强大的Enum类型。 目录介绍特征安装用法设置一个MappedValueRepresentable枚举使用MappedValueCollectionRepresented 使用MappedEnum类型的可编码枚举在ESet中使用OptionSet中的EnumSet 将...
Java enum 的用法详解 Java enum(枚举)是一种特殊的数据类型,用于定义一组固定的常量。从 JDK 1.5 开始,Java 引入了 enum 机制,解决了传统的常量定义方式的不足。 用法一:常量 在 JDK 1.5 之前,我们定义...
枚举(enum)在编程语言中是一种非常有用的类型,它允许我们定义一组命名常量,这些常量通常代表一组相关的值。在C#中,枚举(enum)被广泛用于增强代码的可读性和可维护性。下面我们将深入探讨C#中的枚举用法。 一...
在Laravel框架中,"enum"(枚举)是一种实用的工具,用于限制特定属性或方法的值只能是预定义的一组。PHP在版本8.0中引入了对枚举的支持,这使得在 Laravel 开发中更加方便地处理固定选项的数据类型。本教程将深入...
枚举(Enum)在Java中是一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的常量表示方式。以下是对Enum的详细讲解: 1. **基本枚举定义**: ```java enum Color {BLUE, RED, GREEN;} ``` 这是...
在Laravel框架中,枚举(Enum)是一种实用的工具,可以帮助我们更好地组织代码,提高可读性和可维护性。Laravel Enum库是为Laravel应用程序设计的一个扩展,它允许开发者使用枚举类型来替代传统的常量或字符串,从而...
在这个场景中,我们关注的是一个名为"enum"的Python库,其版本为0.4.7,封装在"enum-0.4.7.tar.gz"的压缩包文件中。这个压缩包通常包含了库的所有源代码、文档和其他相关资源。 `enum`是Python中的一个内置库,自...
在Java编程语言中,枚举(Enum)是一种特殊的类,用于定义固定的常量集合。它在许多场景下比常量接口或静态final变量更安全、更方便。本篇将通过"Java Enum使用Demo源码"深入探讨Java枚举的用法。 首先,枚举在Java...
在Java编程语言中,枚举(`enum`)是一种强大的工具,它允许我们定义一组预定义的常量。在Spring Boot 2.x框架中,枚举的使用可以帮助我们更好地管理和组织代码,提供类型安全和可读性。本篇将深入探讨如何在Spring ...
**PyPI 官网下载 | aenum-1.2.1.tar.gz** 在Python编程语言中,`PyPI`(Python Package Index)是官方的软件仓库,它为开发者提供了存储和分享他们创建的Python模块、库和其他软件工具的平台。用户可以方便地通过`...
简单介绍了DNS和ENUM的原理及在IMS网络中的使用