您的位置:首页 > 编程语言 > Java开发

java 使用enum(枚举)

2016-07-01 14:39 561 查看
 enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中。

  一、语法:

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

四. 给
enum 自定义属性和方法

给 enum 对象加一下 value 的属性和 getValue() 的方法:

public enum WeekEnum{
MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) {
@Override
public boolean isRest() {
return true;
}
},
SUN(0) {
@Override
public boolean isRest() {
return true;
}
};

private int value; //属性

//构造方法
private WeekEnum(int value) {
this.value = value;
}

//value封装get方法
public int getValue() {
return value;
}

public boolean isRest() {
return false;
}
}
public class Test {
public static void main(String[] args) {
System.out.println("WeekEnum.WED 的 value = " + WeekEnum.WED.getValue());
//返回WeekEnum.WED 的 value = 3
}
}


五. EnumSet,EnumMap
的应用

public class Test {
public static void main(String[] args) {
// EnumSet的使用
EnumSet<Week> sets= EnumSet.allOf(Week.class);
for (Week day : sets) {
System.out.println(day);
}

// EnumMap的使用
EnumMap<Week, String> weekMap = new EnumMap(Week.class);
weekMap.put(Week.MON, "星期一");
weekMap.put(Week.TUE, "星期二");
//....
//遍历数据
for (Iterator<Entry<Week, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {
Entry<Week, String> entry = iter.next();
System.out.println(entry.getKey().name() + ":" + entry.getValue());
}
}
}


六. enum
的原理分析
enum 的语法结构尽管和 class 的语法不一样,但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>。Week  经过反编译(java com.hlx.Week  命令)之后得到的内容如下:

public class com.hlx.Week  extends java.lang.Enum{

    public static final com.hlx.Week  MON;

    public static final com.hlx.Week  TUE;

    public static final com.hlx.Week  WED;

    public static final com.hlx.Week  THU;

    public static final com.hlx.Week  FRI;

    public static final com.hlx.Week  SAT;

    public static final com.hlx.Week  SUN;

    static {};

    public int getValue();

    public boolean isRest();

    public static com.hlx.Week [] values();

    public static com.hlx.Week  valueOf(java.lang.String);

    com.hlx.Week (java.lang.String, int, int, com.hlx.Week );

}

所以,
实际上
enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: