JAVA中的枚举类

Java中的枚举类型(Enum)

在Java中,枚举(Enum)是一种特殊的类,它用于表示一组固定的常量。枚举类型在Java 5(JDK 1.5)中被引入,提供了一种类型安全的替代方案,用于替代传统的整型常量(如`int`类型的常量)和字符串常量(`String`)来表示一组固定的值。

枚举类型具有以下特点:

  • 1. 类型安全:枚举类型通过编译器确保类型安全,防止了非法的值。
  • 2. 可读性:枚举提供了更好的代码可读性,因为它们直接描述了值的含义,而不是使用难以理解的整数值或字符串。
  • 3. 方便性:枚举类型可以包含方法、字段和构造函数,这使得它们非常灵活和强大。

枚举类型的基本用法

  • 1. 定义枚举:使用`enum`关键字定义枚举类型。
  • 2. 枚举常量:枚举类型中定义的每个常量都是该类型的一个实例。
  • 3. 方法和字段:枚举类型可以包含方法、字段和构造函数。构造函数必须是私有的,以防止外部代码创建枚举的实例。
  • 4. switch语句:枚举类型非常适合用在`switch`语句中,因为它们提供了清晰的、类型安全的选项。

枚举类型示例

下面是一个简单的枚举类型示例,用于表示星期中的几天。

// 定义名为DayOfWeek的枚举类型
public enum DayOfWeek {
    // 枚举常量
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY;

    // 枚举类型的方法示例:返回星期几的中文表示
    public String getChineseName() {
        switch (this) {
            case MONDAY:
                return "星期一";
            case TUESDAY:
                return "星期二";
            case WEDNESDAY:
                return "星期三";
            case THURSDAY:
                return "星期四";
            case FRIDAY:
                return "星期五";
            case SATURDAY:
                return "星期六";
            case SUNDAY:
                return "星期日";
            default:
                throw new IllegalStateException("Unexpected value: " + this);
        }
    }

    // 枚举类型的另一个方法示例:判断是否是工作日
    public boolean isWeekday() {
        return this != SATURDAY && this != SUNDAY;
    }

    // 枚举类型的构造函数(通常私有)
    // 注意:在Java中,枚举的构造函数默认是私有的,并且通常不需要显式声明。
    // 这里仅作为说明,实际使用中不应这样做(因为编译器不允许)
    // private DayOfWeek() {}

    // 枚举类型的实例化(自动完成,由JVM处理)
    // 枚举的实例(如MONDAY, TUESDAY等)在枚举类型被加载到JVM时自动创建。

    // 测试枚举类型
    public static void main(String[] args) {
        // 访问枚举常量
        DayOfWeek day = DayOfWeek.MONDAY;

        // 调用枚举类型的方法
        System.out.println(day.getChineseName());  // 输出:星期一
        System.out.println(day.isWeekday());       // 输出:true

        // 使用枚举类型在switch语句中
        switch (day) {
            case MONDAY:
            case TUESDAY:
            case WEDNESDAY:
            case THURSDAY:
            case FRIDAY:
                System.out.println("今天是工作日");
                break;
            case SATURDAY:
            case SUNDAY:
                System.out.println("今天是休息日");
                break;
            default:
                // 理论上,这里不会被执行,因为枚举类型包含了所有可能的值
                throw new IllegalStateException("Unexpected value: " + day);
        }
    }
}

枚举类型高级用法

1. 构造函数
虽然枚举的构造函数通常是隐式的,但你可以通过构造函数来初始化枚举实例的字段。然而,由于枚举的构造函数必须是私有的,因此你不能从外部调用它。

public enum Fruit {
    APPLE("red"),
    BANANA("yellow");

    private String color;

    // 枚举的私有构造函数,用来初始化颜色属性
    private Fruit(String color) {
        this.color = color;
    }

    // 获取水果颜色的方法
    public String getColor() {
        return color;
    }
}


 

2. 抽象方法和具体实现
枚举可以包含抽象方法,并且每个枚举常量都可以提供该抽象方法的具体实现。这允许枚举常量具有不同的行为。

public abstract class Shape {
    public abstract double area();
}

public enum SpecificShape implements Shape {
    CIRCLE("circle") {
        @Override
        public double area() {
            // ...计算圆形面积的逻辑...
        }
    },
    RECTANGLE("rectangle") {
        @Override
        public double area() {
            // ...计算矩形面积的逻辑...
        }
    };
   // 其他代码和字段...
}



3. 枚举集合
Java的`EnumSet`和`EnumMap`类提供了特别为枚举类型设计的集合。它们能够确保类型安全并提高性能。
   

EnumSet<DayOfWeek> weekdays = EnumSet.of(DayOfWeek.MONDAY, DayOfWeek.TUESDAY, DayOfWeek.WEDNESDAY);
System.out.println(weekdays); // 输出:[MONDAY, TUESDAY, WEDNESDAY]
  
EnumMap<DayOfWeek, String> dayOfWeekChineseName = new EnumMap<>(DayOfWeek.class);
dayOfWeekChineseName.put(DayOfWeek.MONDAY, "星期一"); // 添加映射关系
System.out.println(dayOfWeekChineseName); // 输出:{MONDAY=星期一}


   
总结   
枚举类型是Java中一个非常强大且实用的特性,它提供了定义一组受限值的能力,并支持丰富的操作和属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值