枚举


详解枚举类型


初识枚举


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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值