枚举

作者: 平头哥2015 | 来源:发表于2018-12-07 19:47 被阅读0次

    从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语句。
    switch (fruit) {
        case APPLE:
            // ...
        case BANANA:
            // ...
    }
    

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

    • 枚举常量的toString()方法返回常量的名称。
    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。这个类定义了所有枚举都可以使用的一些方法。

    • name()方法获取枚举常量的名称。
    • ordinal()方法获取枚举常量在常量列表中的位置的值,称为枚举常量的序数值。序数值从0开始。
    • compareTo()方法比较相同类型的两个枚举常量的序数值。
    • equals()方法比较枚举常量和其他对象是否相等。只有当两个对象都引用同一个枚举中相同的常量时,它们才相等。

    相关文章

      网友评论

          本文标题:枚举

          本文链接:https://www.haomeiwen.com/subject/ocyxhqtx.html