Java 枚举类型入门

1. 枚举定义

通常把枚举理解为一组固定且相关的常量,用一个类型来表示,这样既可以限制它的取值范围,防止出现意外的值,也让 Java 编译器能够进行静态检查,保证类型安全。下面是一个简单的枚举类型定义:

public enum MyEnum {
    A, B, C
}

这是 Java 中最简单的枚举定义,看起来和 C# 中的枚举没什么区别,其实区别大了去了。在 C# 中,枚举本质上是整数常量,而在 Java 中,枚举本质上是引用类型,是类!

既然 MyEnum 是一个类,那么 A、B、C 就是它的三个实例,而且是仅有的三个实例,你不能也无法创建出第四个第五个它的实例。

2. 使用枚举

简单的枚举类型,用法也很简单,首先是赋值和打印:

MyEnum e = null;
e = MyEnum.A;
System.out.println(e); // 打印 A
e = MyEnum.B;
System.out.println(e); // 打印 B
e = MyEnum.C; 
System.out.println(e); // 打印 C

如果使用静态导入语句(import static MyEnum.*;),就可以直接用 A、B、C,不需要前缀了。

3. 枚举与 switch 语句

一般情况下,引用是不能用于 switch 语句的,但枚举例外:

void printMyEnum(MyEnum e) {
    switch (e) {
    case A:
        System.out.println("It's A");
        break;
    case B:
        System.out.println("It's B");
        break;
    case C:
        System.out.println("It's C");
        break;
    }
}

有意思的是,在没有使用静态导入语句的情况下,在 case 后面的常量值也不能用 MyEnum. 作前缀,用了反而报编译错误。

4. 枚举类型的方法

4.1 ordinal()

这个方法返回常量值的序号,从 0 开始。A.ordinal() 返回 0,B.ordinal() 返回 1,C.ordinal() 返回 2。

4.2 name()

返回常量的名称。A.name() 返回 "A",B.name() 返回 "B",C.name() 返回 "C"。

4.3 toString()

默认返回 name() 的结果。可以重写,善于枚举的方法重写,以后会另写一篇文章专门讨论,这里就不多讲了。

5. 总结

如果你已经用烦了以前那种定义静态整数常量的写法,而且总是担心这个些常量的值一不小心被哪个粗心的程序员用错了,那么你应该考虑使用枚举来代替。

参考文献




转载于:https://my.oschina.net/qczhang/blog/187358

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值