【Java基础】24.枚举

本文详细介绍了Java中的枚举类型,包括枚举概念、在内部类中的应用、迭代枚举元素、在switch语句中的使用,以及values(),ordinal(),valueOf()方法的讲解。
摘要由CSDN通过智能技术生成


一、枚举的概念

1.枚举的概念

Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。

例如定义一个季节的枚举类:

/**
 * @ClassName: Season
 * @Description: 枚举(enum)
 * @author: Zh
 * @date: 2024/4/21 10:43
 */
// 枚举类使用 enum 关键字来定义
public enum Season {
    // 枚举的第一行必须罗列枚举类的对象名称,建议全部大写。
    SPRING, SUMMER, AUTUMN, WINTER; // 春天,夏天,秋天,冬天
}

以上枚举类 Season 颜色常量有 SPRING, SUMMER, AUTUMN, WINTER,分别表示春天,夏天,秋天,冬天。

使用实例:

public class Test {
    public static void main(String[] args) {
        Season s1 = Season.SPRING;
        System.out.println("现在的季节是:" + s1);
    }
}

输出结果为:

现在的季节是:SPRING

2.内部类中使用枚举

枚举类也可以声明在内部类中:

public class Test {
    enum Week{
        MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
    }

    public static void main(String[] args) {
        Week w1 = Week.SUNDAY;
        System.out.println("今天是周几:" + w1);
    }
}

输出结果为:

今天是周几:SUNDAY

每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。

3.迭代枚举元素

可以使用 for 语句来迭代枚举元素:

public class Test {
    enum Week{
        MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
    }

    public static void main(String[] args) {
        // 迭代枚举元素
        for (Week myVar : Week.values()) {
            System.out.println(myVar);
        }

    }
}

输出结果为:

MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY

4.在 switch 中使用枚举类

枚举类常应用于 switch 语句中:

public class Test {
    enum Week{
        MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
    }

    public static void main(String[] args) {
        Week w1 = Week.SUNDAY;

        // 在 switch 中使用枚举类
        switch (w1) {
            case MONDAY:
                System.out.println("今天周一,埋头苦干,解决bug ");
                break;
            case TUESDAY:
                System.out.println("今天周二,请求大牛程序员帮忙");
                break;
            case WEDNESDAY:
                System.out.println("今天周三,今晚啤酒、龙虾、小烧烤");
                break;
            case THURSDAY:
                System.out.println("今天周四,主动帮助新来的女程序解决bug");
                break;
            case FRIDAY:
                System.out.println("今天周五,今晚吃鸡");
                break;
            case SATURDAY:
                System.out.println("今天周六,与王婆介绍的小芳相亲");
                break;
            case SUNDAY:
                System.out.println("今天周日,郁郁寡欢、准备上班");
                break;
            default:
                System.out.println("数据有误!");
        }

    }
}

输出结果为:

今天周日,郁郁寡欢、准备上班

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

enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。

values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:

  • values() 返回枚举类中所有的值。
  • ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
  • valueOf()方法返回指定字符串值的枚举常量。

实例:

/**
 * @ClassName: EnumDemo
 * @Description: 枚举,values(), ordinal() 和 valueOf() 方法
 * @author: Zh
 * @date: 2024/4/21 12:32
 */
public class EnumDemo {
    enum Month {
        JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE,
        JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
    }

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

        // 迭代枚举
        for (Month mon : arr) {
            // 查看索引
            System.out.println(mon + "的索引:" + mon.ordinal());
        }

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

运行结果如下:

JANUARY的索引:0
FEBRUARY的索引:1
MARCH的索引:2
APRIL的索引:3
MAY的索引:4
JUNE的索引:5
JULY的索引:6
AUGUST的索引:7
SEPTEMBER的索引:8
OCTOBER的索引:9
NOVEMBER的索引:10
DECEMBER的索引:11
JANUARY

6.枚举类成员

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

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

实例:

/**
 * @ClassName: Test2
 * @Description: 枚举类成员
 * 枚举跟普通类一样可以用自己的变量、方法和构造函数。
 * 构造函数只能使用 private 访问修饰符,所以外部无法调用。
 * 枚举既可以包含具体方法,也可以包含抽象方法。
 * 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。
 * @author: Zh
 * @date: 2024/4/21 12:44
 */
public class Test2 {
    // 输出
    public static void main(String[] args) {
        Color c1 = Color.RED;
        System.out.println("c1:" + c1);
        c1.colorInfo();
    }

    enum Color {
        RED, GREEN, BLUE;

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

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

}

运行结果如下:

Constructor called for : RED
Constructor called for : GREEN
Constructor called for : BLUE
c1:RED
Universal Color
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值