1.什么是枚举

枚举是一种特殊类,关键字enum,

(1)枚举的第一行,只能写一些合法的标识符(名称),名称之间用逗号隔开,这些名称,本质是常量,每个常量都会记住枚举的每一个对象。

(2)枚举类的构造器都是私有的,写不写都只能是私有的,因此枚举类对外部不能创建对象。

(3)枚举都是最终类,不能被继承。

(4)枚举类中,从第二行开始,可以定义类的其他成员变量。

(5)编译器为枚举类新增了几个方法,并且枚举类都是继承java.lang.Enum的,从enum类也会继承一些方法。

面向对象高级之 枚举_枚举类

public class test {
    public static void main(String[] args) {
        // 目标:认识枚举。
        A a1 = A.X;
        System.out.println(a1);

        // 1. 枚举类的构造器是私有的,不能对外创建对象。
        // A a = new A(); // 会报错,因为枚举的构造器是私有的

        // 2. 枚举类的第一行都是枚举值,记住的是枚举类的对象。
        A a2 = A.Y;

        // 3. 枚举类提供一个外部访问的API
        A[] as = A.values(); // 获取所有枚举值
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
public enum A {
    // 注意:枚举类的第一行必须罗列的是枚举对象的名字。
    X, Y, Z;

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

2.抽象枚举

public enum B {
    X(){// 枚举值 X,因为内部有抽象方法,所以每一个枚举值都需要实现该方法
        @Override
        public void go() {
            // 实现 X 的 go() 方法
        }
    },
    Y("张三") {// 枚举值 Y,带参数的构造方法
        @Override
        public void go() {
            System.out.println(getName() + " 在跑~~");
        }
    };

    private String name;

    B() {
    }

    B(String name) {
        this.name = name;
    }

    public abstract void go();// 抽象方法

    public String getName() {
        return name;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

3.枚举的应用

用来展示一组信息。然后作为参数进行传输。

public class test {
    public static void main(String[] args) {
        // 目标:实践枚举的应用场景,做信息标志和分类。
        // check(1);
        // check(Constant.BOY);
        // check(21);
        check(Constant2.GIRL);
    }

    public static void check(Constant2 sex) {
        switch (sex) {
            case BOY:
                System.out.println("展示一些游戏");
                break;
            case GIRL:
                System.out.println("展示一些帅哥");
                break;
        }
    }
}

enum Constant2 {
    BOY, GIRL;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.