面向对象【枚举类】

请添加图片描述

枚举类

枚举类是一种特殊的类,它用于定义一组固定数量的常量。枚举类在实际开发中非常有用,因为它们可以增加代码的可读性和可维护性。本文将介绍Java枚举类的定义、常用方法以及一些最佳实践。

枚举类的主要作用有以下几个方面:

  1. 定义常量集合: 枚举类可以用于定义一组有限的常量集合,例如一周的每一天、星期几、颜色等。这样的定义可以提高代码的可读性,因为它们明确了程序员的意图,并且避免了使用散列常量或者魔术数字。

  2. 类型安全性: 枚举类提供了类型安全性,即编译器可以确保在使用枚举常量时不会出现拼写错误或者非法值。因为枚举常量在编译时就已经确定,所以不会出现运行时错误。

  3. 简化代码: 枚举类可以帮助简化代码,因为它们自动提供了一些常用的方法,如比较、遍历等。此外,枚举常量本身也可以具有属性和方法,使得代码更加灵活和易于维护。

  4. 替代常量集合: 在传统的Java编程中,常常使用整型常量或者字符串常量来表示一组相关的常量。然而,这种方式存在着不便利和易出错的问题。枚举类提供了一种更加优雅和类型安全的替代方案。

  5. switch语句的替代: 枚举类在替代复杂的switch语句时非常有用。通过将每个case与一个枚举常量相关联,可以使代码更加清晰和易于理解。

定义枚举类

在Java中,使用enum定义枚举类。例如:

public enum ClassName {
    CONSTANT1,   // 枚举常量1
    CONSTANT2,   // 枚举常量2
    // 更多枚举常量
}

public enum Day {
    MONDAY, 
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}

定义了一个Day枚举类,其中包含了一周的每一天作为常量。注意,这些常量默认都是public static final类型的,因此可以在其他类中直接访问。

enum 方式定义的要求和特点

  • 枚举类的常量对象列表必须在枚举类的首行,因为是常量,所以建议大写。
  • 列出的实例系统会自动添加 public static final 修饰。
  • 如果常量对象列表后面没有其他代码,那么“;”可以省略,否则不可以省略“;”。
  • 编译器给枚举类默认提供的是 private 的无参构造,如果枚举类需要的是无参构造,
    就不需要声明,写常量对象列表时也不用加参数
  • 如果枚举类需要的是有参构造,需要手动定义,有参构造的 private 可以省略,调用
    有参构造的方法就是在常量对象名后面加(实参列表)就可以。
  • 枚举类默认继承的是 java.lang.Enum 类,因此不能再继承其他的类型。
  • • JDK5.0 之后 switch,提供支持枚举类型,case 后面可以写枚举常量名,无需添加枚
    举类作为限定。

enum 中常用方法

枚举类提供了一些常用的方法来处理枚举常量

  1. values()

values()方法返回枚举类中定义的所有枚举常量的数组。这个方法非常有用,可以用于遍历枚举常量。

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

// 使用values()方法遍历枚举常量
for (Day day : Day.values()) {
    System.out.println(day);
}
  1. ordinal()

ordinal()方法返回枚举常量在枚举中的位置,位置从0开始计数。通常情况下,枚举常量的顺序是它们在枚举类中定义的顺序。

Day day = Day.MONDAY;
System.out.println(day.ordinal()); // 输出 0
  1. name()

name()方法返回枚举常量的名称。

Day day = Day.MONDAY;
System.out.println(day.name()); // 输出 MONDAY
  1. valueOf(String name)

valueOf(String name)方法根据指定的名称返回相应的枚举常量。这个方法通常与枚举类的名称一起使用。

Day day = Day.valueOf("MONDAY");
System.out.println(day); // 输出 MONDAY
  1. toString()

toString()方法返回枚举常量的字符串表示形式。默认情况下,它返回枚举常量的名称。

Day day = Day.MONDAY;
System.out.println(day.toString()); // 输出 MONDAY

实现接口的枚举类

枚举类可以实现一个或多个接口。在Java中,枚举类与普通类一样,可以实现接口,这使得枚举类可以拥有接口的所有特性和方法。

假设有一个接口Shape表示形状,并且有一个枚举类Color表示颜色,我们可以让Color枚举类实现Shape接口,以便为每种颜色指定特定的形状

public interface Shape {
    void draw();
}

public enum Color implements Shape {
    RED {
        @Override
        public void draw() {
            System.out.println("Draw a red shape");
        }
    },
    GREEN {
        @Override
        public void draw() {
            System.out.println("Draw a green shape");
        }
    },
    BLUE {
        @Override
        public void draw() {
            System.out.println("Draw a blue shape");
        }
    };
}

public class Main {
    public static void main(String[] args) {
        Color.RED.draw();
        Color.GREEN.draw();
        Color.BLUE.draw();
    }
}

// 输出结果:
// Draw a red shape
// Draw a green shape
// Draw a blue shape

  • 29
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@才华有限公司

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值