一、枚举类的创建

1、创建的枚举类默认就已经继承了java枚举enum,所以任何自己创建的枚举类都无法继承其他类。
2、在创建的枚举类中,创建实例必须放在最上面,创建的多个实例之间用逗号隔开。如果实例化常量没有初始化,系统会默认提供一个无参的构造方法。

/**
 * @author shanyangyang
 * @date 2020/3/1
 */
public enum Season {
    SPING, SUMMMER, FALL, WINTER;
}

3、如果创建的实例有默认的初始化值,则在枚举类中需要提供私有的带有参数的构造函数,private可以省略不写。

/**
 * @author shanyangyang
 * @date 2020/3/1
 */
public enum Season {
    SPING("春天"), SUMMMER("夏天"), FALL("秋天"), WINTER("冬天");

    private final String seansonName;

    Season(String seansonName) {
        this.seansonName = seansonName;
    }
}

4、如果枚举类中有抽象方法,注意抽象方法要放在实例的后面。则每个实例都需要实现枚举类中的这个抽象方法。

public enum Season {

    SPING("春天"){
        @Override public String doPlay() {
            return "春天";
        }
    },

    SUMMMER("夏天"){
        @Override public String doPlay() {
            return "夏天";
        }
    },

    FALL("秋天"){
        @Override public String doPlay() {
            return "秋天";
        }
    }, WINTER("冬天"){
        @Override public String doPlay() {
            return "冬天";
        }
    };

    private final String seansonName;

    Season(String seansonName) {
        this.seansonName = seansonName;
    }

    public abstract String doPlay();
}
二、枚举类的初始化

下面的题目中,构造方法被调用了几次?

public enum AccountType {
    SAVING, FIXED, CURRENT, MATH;

    private AccountType() {
        System.out.println("It is a AccountType");
    }

    public static void main(String[] args) {
        System.out.println(AccountType.SAVING);
    }
}

答案是四次,因为枚举类中每个属性的初始化,相当于调用构造函数创建一个属性对应的对象,上面的代码中有四个属性,所以构造函数会被调用四次。