枚举

2018-12-07  本文已影响0人  平头哥2015

从JDK 5开始,枚举被添加到Java语言中。在Java中,枚举被定义为类,可以具有构造函数,方法以及实例变量。

基础知识

枚举的声明

创建枚举需要使用关键字enum,例如:

public enum Fruit {

    APPLE, BANANA, ORANGE, PEACH

}

APPLE, BANANA等称为枚举常量,这些常量被隐式地声明为public static final成员,并且都是Fruit类型(自类型化)。

枚举的特点

枚举虽然被定义为类,但是不能通过new来实例化枚举。枚举变量的声明和使用在许多方面与基本类型相同。

Fruit fruit = Fruit.APPLE;
fruit == Fruit.BANANA;
switch (fruit) {
    case APPLE:
        // ...
    case BANANA:
        // ...
}

注意:在case语句中,枚举常量没有使用枚举类型进行限定,这是因为switch表达式中的枚举类型已经隐式指定了case常量的枚举类型。

System.out.println(Fruit.BANANA); // BANANA

预定义方法

所有枚举都自动包含两个预定义方法:values()和valueOf()。

values方法

values()返回包含枚举常量列表的数组。一般形式如下:
public static enum-type[] values()

例子

Fruit[] fruits = Fruit.values();
for (Fruit fruit : fruits) {
    System.out.println(fruit);
}

valueOf方法

valueOf()返回传入的字符串参数对应的枚举常量。一般形式如下:
public static enum-type valueOf(String name)

例子

Fruit fruit = Fruit.valueOf("ORANGE");
System.out.println(fruit); // ORANGE

枚举是类类型

虽然不能用new实例化枚举,但是枚举却有许多和其他类相同的功能,比如枚举可以有构造函数、实例变量和方法,甚至可以实现接口。

public enum Fruit {

    APPLE(10), BANANA(1), ORANGE(2), PEACH;

    private int price;

    Fruit() {
        price = 8;
    }

    Fruit(int price) {
        this.price = price;
    }

    public int getPrice() {
        return price;
    }

}

虽然枚举是类类型,但是枚举有两条限制使得它不能扩展。


枚举继承自Enum类

尽管声明枚举时不能继承其它类,但是所有枚举都自动继承父类java.lang.Enum。这个类定义了所有枚举都可以使用的一些方法。

上一篇下一篇

猜你喜欢

热点阅读