Java(24)枚举类enum

枚举类enum

枚举类通过enum关键字声明,枚举类跟普通类没多大的区别。

枚举类的特点:

  • 定义的enum类型总是继承自java.lang.Enum,且无法被继承,因为默认被final修饰
public enum color{}
//相当于public final class color extends enum{}
  • enum类无法通过new创建实例对象,实例只能在枚举类内定义,且实例名称一般使用纯大写。
enum Festival{
    SPRING,SUMMER, AUTUMN, WINTER;
    //上面四个实际上都是枚举类的实例
    /*相当于:
    public final static Festival SPRING=new Festival();
    public final static Festival SUMMER=new Festival();
    public final static Festival AUTUMN=new Festival();
    public final static Festival WINTER=new Festival();
    */
}
class RunClass{
    public static void main(String[] args) {
        Festival fa=Festival.SPRING; //从这里可以看出枚举类的实例在是类内定义的
        //Festival fb=new Festival();-->编译错误:Enum types cannot be instantiated
    }
}
  • 枚举类是单例模式,即类内定义的每个实例都是唯一实例。
package day01;

enum Festival{
    SPRING,SUMMER, AUTUMN, WINTER;
}
class RunClass{
    public static void main(String[] args) {
        Festival fa=Festival.SPRING;
        Festival fb=Festival.SPRING;
        System.out.println(fa.equals(fb));//输出true,说明fa和fb指向同一个对象
        Festival fc=Festival.SUMMER;
        Festival fd=Festival.SUMMER;
        System.out.println(fc.equals(fd));//输出true
    }
}
/*注意:对于非String类的引用类型,equals()作用是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象*/
  • 枚举类的构造器只能使用private访问控制符,如果省略了构造器的访问控制符,则默认使用private修饰。(从上面的单例模式特点就可以看出来)
enum WeekDay{
    MONDAY,TUESDAY,WENDESDAY;
    //public WeekDay(){} --->编译报错,枚举类的构造器默认使用private,也只能是private
}

案例1:

package day01;

enum Festival{
    SPRING("春天","天气晴朗,温度适中"), //实际上这4个实例相当于调用构造方法2
    SUMMER("夏天","天气很热,容易下雨"),
    AUTUMN("秋天","天气渐冷,收割的季节"),
    WINTER("冬天","天气寒冷,手脚僵硬");

    private String name;
    private String desc;
    //构造方法1:
    Festival(){}
    //构造方法2:
    Festival(String name, String desc){
        this.name=name;
        this.desc=desc;
    }
    public void showInfo(){
        System.out.println(this.name+" : "+this.desc);
    }
}
class RunClass{
    public static void main(String[] args) {
        Festival fa=Festival.SPRING;
        fa.showInfo();
        Festival fw=Festival.WINTER;
        fw.showInfo();
    }
}
/*运行结果为:
春天 : 天气晴朗,温度适中
冬天 : 天气寒冷,手脚僵硬
*/

案例2:枚举类的常用方法

enum Festival{
    SPRING,SUMMER,AUTUMN,WINTER;
}
class RunClass{
    public static void main(String[] args) {
        Festival fw=Festival.WINTER;
        fw.name(); //返回枚举常量的名称
        fw.ordinal();//返回枚举常量的序数
    }
}

案例3:枚举类与switch的结合使用

package day01;

enum Festival{
    SPRING,SUMMER,AUTUMN,WINTER;
}
class RunClass{
    public static void main(String[] args) {
        Festival ft=Festival.AUTUMN;
        switch (ft){
            case SPRING:
                System.out.println("这是春天");
                break;
            case SUMMER:
                System.out.println("这是夏天");
                break;
            case AUTUMN:
                System.out.println("这是秋天");
                break;
            case WINTER:
                System.out.println("这是冬天");
                break;
            default:
                System.out.println("不认识"+ft);
        }
    }
}

posted @ 2020-08-29 09:36  Whatever_It_Takes  阅读(1097)  评论(0编辑  收藏  举报