详解枚举类型
初识枚举
package com.nju.enumm;
/**
* @author Administrator
* 初识枚举类型
*/
public class Test1 {
public enum Direction {
FRONT,BEHIND,LEFT,RIGTHT;
}
public static void main(String[] args){
Direction d=Direction.FRONT;
System.out.println(d);
}
}
对switch的支持
package com.nju.enumm;
/**
* @author Administrator
* 枚举对switch类型的支持
*/
public class Test2 {
public enum Direction {
FRONT("front", 1),
BEHIND("behind", 2),
LEFT("left", 3),
RIGTHT("right", 4);
private String name;
private int id;
private Direction(String name, int id) {
this.name = name;
this.id = id;
}
private Direction() {
}
public String getName() {
return name;
}
public int getId() {
return id;
}
public static Direction getDirection(int i){
switch (i) {
case 1:
return Direction.FRONT;
case 2:
return Direction.BEHIND;
case 3:
return Direction.LEFT;
case 4:
return Direction.RIGTHT;
default:
return null;
}
}
}
public static void main(String[] args) {
Direction d=Direction.getDirection(1);
System.out.println(d.getId());
}
}
匿名定义枚举类型。
package com.nju.enumm;
public class Test3 {
enum Direction{
FRONT(){
public void fun(){
System.out.println("FRONT");
}
},
BEHIND(){
public void fun(){
System.out.println("BEHIND");
}
},
LEFT(){
public void fun(){
System.out.println("LEFT");
}
},
RIGHT(){
public void fun(){
System.out.println("RIGHT");
}
};
public abstract void fun();
}
public static void main(String[] args) {
Direction.BEHIND.fun();
}
}
来我们在认识一下枚举的实质。
其实枚举也是编译期状态,在运行时JVM并不知道什么是枚举类型。这也就是说,编译器需要把枚举类型转换成普通类。
enum Direction {FRONT, BEHIND, LEFT, RIGHT}
final class Direction extends Enum {
public static final Direction FRONT;
public static final Direction BEHIND;
public static final Direction LEFT;
public static final Direction RIGHT;
private static final Direction ENUM$VALUES[];
static {
FRONT = new Direction("FRONT", 0);
BEHIND = new Direction("BEHIND", 1);
LEFT = new Direction("LEFT", 2);
RIGHT = new Direction("RIGHT", 3);
ENUM$VALUES = new Direction[] {FRONT, BEHIND, LEFT, RIGHT};
}
private Direction(String s, int i) {
super(s, i);
}
public static Direction[] values() {
Direction adirection[];
int i;
Direction adirection1[];
System.arraycopy(adirection = ENUM$VALUES, 0,
adirection1 = new Direction[i = adirection.length], 0, i);
return adirection1;
}
public static Direction valueOf(String s) {
return (Direction) Enum.valueOf(Direction.class, s);
}
}