Java进阶_枚举类

枚举类概念

        Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。

//枚举类
enum Color {
    RED, GREEN, BLUE;
}

//使用枚举类
public class Test {
    // 执行输出结果
    public static void main(String[] args) {
        Color c1 = Color.RED;
        System.out.println(c1);
    }
}

        每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。将以上的枚举类 Color 转化在内部类实现: 

//枚举类内部类实现
class Color {
    public static final Color RED = new Color();
    public static final Color BLUE = new Color();
    public static final Color GREEN = new Color();
}

        枚举类也可以声明在内部类中, 也是使用 enum 关键字来定义,各个常量使用逗号 , 来分割。

//枚举类声明在内部类中
public class Test {
    enum Color {
        RED, GREEN, BLUE;
    }

    // 执行输出结果
    public static void main(String[] args) {
        Color c1 = Color.RED;
        System.out.println(c1);
    }
}

举元素使用

迭代枚举类中的所有元素:

enum Color {
    RED, GREEN, BLUE;
}

public class MyClass {
    public static void main(String[] args) {
        
        //使用 for 语句来迭代枚举元素: 
        for (Color myVar : Color.values()) {
            System.out.println(myVar);
        }
    }
}

 在 switch 中使用枚举类

enum Color {
    RED, GREEN, BLUE;
}

public class MyClass {
    public static void main(String[] args) {
        Color myVar = Color.BLUE;

        //枚举类常应用于 switch 语句中
        switch (myVar) {
            case RED:
                System.out.println("红色");
                break;
            case GREEN:
                System.out.println("绿色");
                break;
            case BLUE:
                System.out.println("蓝色");
                break;
        }
    }
}

 values(), ordinal() 和 valueOf() 方法

        enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中。

values(): 返回枚举类中所有的值。

ordinal():找到每个枚举常量的索引,就像数组索引一样。

valueOf():返回指定字符串值的枚举常量。

enum Color {
    RED, GREEN, BLUE;
}

public class Test {
    public static void main(String[] args) {
        // 调用 values() 
        Color[] arr = Color.values();

        // 迭代枚举
        for (Color col : arr) {
            // 查看索引
            System.out.println(col + " at index " + col.ordinal());
        }

        // 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException 
        System.out.println(Color.valueOf("RED"));
        // System.out.println(Color.valueOf("WHITE")); 
    }
}

枚举类成员

        枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。

        枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。

enum Color {
    RED, GREEN, BLUE;

    // 构造函数
    private Color() {
        System.out.println("Constructor called for : " + this.toString());
    }

    public void colorInfo() {
        System.out.println("Universal Color");
    }
}

public class Test {
    // 输出
    public static void main(String[] args) {
        Color c1 = Color.RED;
        System.out.println(c1);
        c1.colorInfo();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值