java enum的用法

原始的常量定义:

  

1 public static fianl MON=“Mon”;
2 public static final TUE="Tue";

语法(定义)

创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

1 public enum EnumTest {
2     MON, TUE, WED, THU, FRI, SAT, SUN;
3 }

这段代码实际上调用了7次 Enum(String name, int ordinal):

new Enum<EnumTest("MON",0);
new Enum<EnumTest("TUE",1);
new Enum<EnumTest("WED",2);
......

遍历、switch 等常用操作

  对enum进行遍历和switch的操作示例代码:

 1 public class Test {
 2     public static void main(String[] args) {
 3         for (EnumTest e : EnumTest.values()) {
 4             System.out.println(e.toString());
 5         }
 6
 7         System.out.println("----------------我是分隔线------------------");
 8
 9         EnumTest test = EnumTest.THU;
10         switch (test) {
11         case MON:
12             System.out.println("今天是星期一");
13             break;
14         case TUE:
15             System.out.println("今天是星期二");
16             break;
17         // ... ...
18         default:
19             System.out.println(test);
20             break;
21         }
22     }
23 }输出结果:

    MON

    TUE

    WED

    ...

    ------------我是分割线--------------

    今天是星期四

enum 自定义属性和方法

 1  public enum EnumTest{
 2  2         MON("星期一", 1), TUE("星期二", 2), WED("星期三", 3), THU("星期四", 4);
 3  3         // 成员变量
 4  4         private String name;
 5  5         private int index;
 6  6
 7  7         // 构造方法
 8  8         private EnumTest(String name, int index) {
 9  9             this.name = name;
10 10             this.index = index;
11 11         }
12             // 覆盖方法
13            @Override
14             public String toString() {
15                 return this.index + "_" + this.name;
16             }
17 12       
18 13         // 普通方法
19 14         public static String getName(int index) {
20 15             for (EnumTest e : EnumTest.values()) {
21 16                 if (e.getIndex() == index) {
22 17                     return e.name;
23 18                 }
24 19             }
25 20             return null;
26 21         }
27 22
28 23         // get set 方法
29 24         public String getName() {
30 25             return name;
31 26         }
32 27
33 28         public void setName(String name) {
34 29             this.name = name;
35 30         }
36 31
37 32         public int getIndex() {
38 33             return index;
39 34         }
40 35
41 36         public void setIndex(int index) {
42 37             this.index = index;
43 38         }
44 39     }    
 1 public class Test {
 2     public static void main(String[] args) {
 3         // EnumSet的使用
 4         EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);
 5         for (EnumTest day : weekSet) {
 6             System.out.println(day);
 7         }
 8
 9         // EnumMap的使用
10         EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class);
11         weekMap.put(EnumTest.MON, "星期一");
12         weekMap.put(EnumTest.TUE, "星期二");
13         // ... ...
14         for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {
15             Entry<EnumTest, String> entry = iter.next();
16             System.out.println(entry.getKey().name() + ":" + entry.getValue());
17         }
18     }
19 }

原理分析

enum 的语法结构尽管和 class 的语法不一样,但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>。实际上 enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。

总结

可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。

时间: 2024-12-15 01:33:28

java enum的用法的相关文章

Java enum的用法详解

在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. enum Signal { GREEN, YELLOW, RED } public cl

【转】Java enum的用法详解

用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. enum Signal { GREEN, YELLOW, RED } pu

[Java基础] Java enum的用法详解

用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. enum Signal { GREEN, YELLOW, RED } pu

Java enum的用法详解[转]

Ref:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持i

Java Enum用法详解

Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. enum Signal { GREEN, YE

java枚举的用法

java枚举的用法 1. 枚举类型的使用 package com.longfor.devops.eagleeye.client.dto; import lombok.Data; /** * @author liuyang */ @Data public class AppStatusDTO { /** * app的ID */ private String appInstanceId; /** * app的状态 */ private Status status; /** * 状态的内容 */ pr

Rhythmk 一步一步学 JAVA (20) JAVA enum常用方法

JAVA 枚举定义常用方法: 1.static Enum valueOf(Class enum,String name) 返回指定name的枚举类型 2.Static Enum values[] 返回枚举常量集合 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

JAVA的continue用法

JAVA的continue用法: public class test{ public static void main(String [] args){  for(int i=0;i<=10;i++){   if(i%2!=0){    continue;      }   System.out.println(i);    } }} 其实很简单,continue就是中断本次循环开始下一次. 结合这段代码就是.当i是奇数时,不打印,直接结束循环,开始下一次. 还一个例子: //测试continu

汉诺塔(-) java modPow 的用法;

汉诺塔(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵 天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金 片:一次只移动一片,不管在哪根针上,小片必须在大片上面.僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消