Java教程

Java Enums

Java中的 Enums是一种数据类型,其中包含一组固定的常量。
它可以用于一周中的几天(周日,周一,周二,周三,周四,周五和周六),方向(北,南,东和西),季节(Spring,夏季) ,冬天和秋天或秋天),颜色(红色,黄色,蓝色,绿色,白色和黑色)等。根据Java的命名约定,所有常量都应使用大写字母。因此,我们有用大写字母表示的枚举常量。
Java枚举可以看作是具有一组固定的常量(不变的变量)的类。 Java枚举常量是静态的,并且是隐式的final。从JDK 1.5开始可用。
枚举用于创建我们自己的数据类型,例如类。 枚举数据类型(也称为枚举数据类型)用于在Java中定义枚举。与C/C ++不同,Java中的枚举更强大。在这里,我们可以在类内部或类外部定义一个枚举。
Java Enum在内部继承了 Enum类,因此它不能继承任何其他类,但是可以实现许多接口。我们可以在Java枚举中包含字段,构造函数,方法和主要方法。

Java枚举要记住的点

枚举可提高类型安全性 枚举可以在开关中轻松使用 可以遍历枚举 枚举可以具有字段,构造函数和方法 Enum可以实现许多接口,但是不能扩展任何类,因为它在内部扩展了Enum类 Java枚举点

Java枚举的简单示例

class EnumExample1{
    //defining the enum inside the classpublic enum Season {
    WINTER, SPRING, SUMMER, FALL }
    //main methodpublic static void main(String[] args) {
        //traversing the enumfor (Season s : Season.values())System.out.println(s);
    }
}
输出:
WINTER
SPRING
SUMMER
FALL
让我们看看Java枚举的另一个示例,其中我们使用Java枚举的value(),valueOf()和ordinal()方法。
class EnumExample1{
    //defining enum within classpublic enum Season {
    WINTER, SPRING, SUMMER, FALL }
    //creating the main methodpublic static void main(String[] args) {
        //printing all enumfor (Season s : Season.values()){
            System.out.println(s);
        }
        System.out.println("Value of WINTER is: "+Season.valueOf("WINTER"));
        System.out.println("Index of WINTER is: "+Season.valueOf("WINTER").ordinal());
        System.out.println("Index of SUMMER is: "+Season.valueOf("SUMMER").ordinal());
    }
}
输出:
WINTER
SPRING
SUMMER
FALL
Value of WINTER is: WINTER
Index of WINTER is: 0
Index of SUMMER is: 2
注意: Java编译器在编译时会在枚举内内部添加values(),valueOf()和ordinal()方法。

枚举中values()方法的用途是什么?

Java编译器在内部添加了一个静态类和最终类。创建枚举时的values()方法。 values()方法返回包含枚举的所有值的数组。

枚举中的valueOf()方法的目的是什么?

Java编译器在创建枚举时在内部添加valueOf()方法。 valueOf()方法返回给定常量枚举的值。

枚举中ordinal()方法的用途是什么?

内部Java编译器创建枚举时添加ordinal()方法。 ordinal()方法返回枚举值的索引。

由编译器为上述枚举类型示例生成的内部代码
java编译器在内部创建一个静态且最终的类,该类扩展了Enum类,如以下示例所示:
public static final class EnumExample1$Season extends Enum{
    private EnumExample1$Season(String s, int i) {
        super(s, i);
    }
    public static EnumExample1$Season[] values() {
        return (EnumExample1$Season[])$VALUES.clone();
    }
    public static EnumExample1$Season valueOf(String s) {
        return (EnumExample1$Season)Enum.valueOf(EnumExample1$Season, s);
    }
    public static final EnumExample1$Season WINTER;
    public static final EnumExample1$Season SPRING;
    public static final EnumExample1$Season SUMMER;
    public static final EnumExample1$Season FALL;
    private static final EnumExample1$Season $VALUES[];
    static {
        WINTER = new EnumExample1$Season("WINTER", 0);
        SPRING = new EnumExample1$Season("SPRING", 1);
        SUMMER = new EnumExample1$Season("SUMMER", 2);
        FALL = new EnumExample1$Season("FALL", 3);
        $VALUES = (new EnumExample1$Season[] {
        WINTER, SPRING, SUMMER, FALL }
        );
    }
}

定义Java枚举

该枚举可以在类的内部或外部定义,因为它类似于类。枚举常量末尾的分号(;)是可选的。例如:
enum Season {
WINTER, SPRING, SUMMER, FALL }
或者,
enum Season {
    WINTER, SPRING, SUMMER, FALL;
}
Java枚举的定义相同。

Java枚举示例: 在类外部定义

enum Season {
WINTER, SPRING, SUMMER, FALL }
class EnumExample2{
    public static void main(String[] args) {
        Season s=Season.WINTER;
        System.out.println(s);
    }
}
输出:
冬季

Java枚举示例: 在类内部定义

class EnumExample3{
    enum Season {
        WINTER, SPRING, SUMMER, FALL;
    }
    //semicolon(;
    ) is optional herepublic static void main(String[] args) {
        Season s=Season.WINTER;
        //enum type is required to access WINTERSystem.out.println(s);
    }
}
输出:
WINTER

Java枚举示例: 枚举内部的主要方法

如果将main()方法放入枚举,则可以直接运行枚举。
enum Season {
    WINTER, SPRING, SUMMER, FALL;
    public static void main(String[] args) {
        Season s=Season.WINTER;
        System.out.println(s);
    }
}
输出:
WINTER

将特定值初始化为枚举常量

枚举常量的初始值从0、1、2、3等开始。但是,我们可以通过定义字段和构造函数来将特定值初始化为枚举常量。如前所述,Enum可以具有字段,构造函数和方法。

为枚举常量指定初始值的示例

class EnumExample4{
    enum Season{
        WINTER(5), SPRING(10), SUMMER(15), FALL(20);
        private int value;
        private Season(int value){
            this.value=value;
        }
    }
    public static void main(String args[]){
        for (Season s : Season.values())System.out.println(s+" "+s.value);
    }
}
输出:
WINTER 5
SPRING 10
SUMMER 15
FALL 20

注意: 枚举类型的构造函数是私有的。如果您不声明私有编译器,则会在内部创建私有构造函数。

enum Season{
    WINTER(10),SUMMER(20);
    private int value;
    Season(int value){
        this.value=value;
    }
}

由编译器为上述枚举类型示例生成的内部代码

final class Season extends Enum{
    public static Season[] values() {
        return (Season[])$VALUES.clone();
    }
    public static Season valueOf(String s) {
        return (Season)Enum.valueOf(Season, s);
    }
    private Season(String s, int i, int j) {
        super(s, i);
        value = j;
    }
    public static final Season WINTER;
    public static final Season SUMMER;
    private int value;
    private static final Season $VALUES[];
    static {
        WINTER = new Season("WINTER", 0, 10);
        SUMMER = new Season("SUMMER", 1, 20);
        $VALUES = (new Season[] {
        WINTER, SUMMER }
        );
    }
}

我们可以通过新关键字创建Enum实例吗?

否,因为它仅包含私有构造函数。

枚举中可以有一个抽象方法吗?

是的,当然可以!我们可以有抽象方法,并可以提供这些方法的实现。

switch语句中的Java枚举

我们可以像给定示例中那样将enum应用于switch语句:
应用示例在switch语句上枚举
class EnumExample5{
    enum Day{
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}
    public static void main(String args[]){
        Day day=Day.MONDAY;
        switch(day){
            case SUNDAY: System.out.println("sunday");
            break;
            case MONDAY: System.out.println("monday");
            break;
            default:System.out.println("other day");
        }
    }
}
输出:
monday
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4