Enum枚举类型

enum类型定义

enum类型实际是一个类,继承自java.lang.Enum,编译器将enum类型单独编译成了一个字节码文件,枚举类型的枚举值都是常量即常见的public static final 的形式,因此枚举类中的枚举值最好全部大写。

定义一个enum类

public enum Color {
    RED, GREEN, BLANK, YELLOW  
}

可以看到编译后的class文件中将枚举值编译成了常量

public final class Color extends Enum
{

    private Color(String s, int i){...}

    public static Color[] values(){...}

    public static Color valueOf(String s){...}

    public static final Color RED;
    public static final Color GREEN;
    public static final Color BLANK;
    public static final Color YELLOW;
    private static final Color ENUM$VALUES[];

    static 
    {
        RED = new Color("RED", 0);
        GREEN = new Color("GREEN", 1);
        BLANK = new Color("BLANK", 2);
        YELLOW = new Color("YELLOW", 3);
        ENUM$VALUES = (new Color[] {
            RED, GREEN, BLANK, YELLOW
        });
    }

既然是类,我们可以在Enum中定义构造器、方法、数据域,其中构造器一定是私有的,这样保证外部不能访问构造新的枚举值,但方法和数据域外部可以访问。

public enum Color {
    RED(255, 0, 0), GREEN(0, 255, 0), BLANK(0, 0, 0), YELLOW(255, 255, 0);// 注意在末尾加分号
    private int red;// 数据域定义
    private int green;
    private int blue;

    private Color(int r, int g, int b) {//构造方法,私有
        this.red = r;
        this.green = g;
        this.blue = b;
    }

    @Override
    public String toString() {//重写父类toString
        return "(" + red + "," + green + "," + blue + ")";
    }
    getter...setter...
}

所有的枚举类型都继承自Enum抽象类,该类中的方法

 public final int ordinal()

返回枚举值在枚举类型的顺序Color.RED.ordinal()//0,该顺序取决于定义的顺序

public final String name()

返回枚举值得字段值Color.RED.name()//RED,为枚举值得字符串

public final int compareTo(E o)

实现了Comparable接口,返回两个枚举值之间的顺序之差Color.RED.compareTo(Color.BLANK)//-2

toString(),equal()比较两个枚举类型的引用使用==比较返回布尔值

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

与toString()方法对应,返回带指定名称的指定枚举类型的枚举常量Color.valueOf("RED")//(255,0,0) 返回为枚举值的toString返回

Color color = null;
switch (color) {
case RED:
    break;
case GREEN:
    break;
default:
    break;
}

Enum类型可以用于switch判断。

public enum Color implements Serializable

Enum可以实现接口,Java单继承模式下因为已经继承了Enum类,所以不能继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值