尚硅谷Java培训之枚举

8.1.1 什么是枚举

类的对象只有有限个的、确定的

例如:

星期:Monday(星期一)......Sunday(星期天)

性别:Man(男)、Woman(女)

月份:January(1月)......December(12月)

季节:Spring(春节)......Winter(冬天)

七彩标准色:Red(红)......Purple(紫)

支付方式:Cash(现金)、WeChatPay(微信)、Alipay(支付宝)、BankCard(银行卡)、CreditCard(信用卡)

就职状态:Busy、Free、Vocation、Dimission

订单状态:Nonpayment(未付款)、Paid(已付款)、Fulfilled(已配货)、Delivered(已发货)、Return(退货)、Checked(已确认)

8.1.2 如何定义枚举类型

要点:

  • 私有化类的构造器,保证不能在类的外部创建其对象
  • 在类的内部创建枚举类的实例。声明为:public static final

JDK1.5之前:

public class TestEnumType {

 

    public static void main(String[] args) {

         Season s = Season.SPRING;

         System.out.println(s);

    }

 

}

class Season{

    public static final Season SPRING = new Season();

    public static final Season SUMMER = new Season();

    public static final Season AUTUMN = new Season();

    public static final Season WINTER = new Season();

 

    private Season(){

    }

 

    public String toString(){

         if(this == SPRING){

             return "SPRING";

         }else if(this == SUMMER){

             return "SUMMER";

         }else if(this == AUTUMN){

             return "AUTUMN";

         }else{

             return "WINTER";

         }

    }

}

JDK1.5之后:

  • 使用 enum 定义的枚举类默认继承了lang.Enum类。因此不能再继承其他类。
  • 枚举类的所有构造器只能使用 private 访问控制符
  • 枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾),必须在枚举类的第一行声明枚举类对象。列出的实例系统会自动添加 public static final 修饰
  • JDK 1.5 之后可以在 switch 表达式中使用Enum定义的枚举类的对象作为表达式, case 子句可以直接使用枚举值的名字

package com.enumtype.after15;

 

public class TestEnumType {

 

    public static void main(String[] args) {

         Season s = Season.SPRING;

         switch(s){

         case SPRING:

             System.out.println("春暖花开");break;

         case SUMMER:

             System.out.println("夏日炎炎");break;

         case AUTUMN:

             System.out.println("秋高气爽");break;

         case WINTER:

             System.out.println("白雪皑皑");break;

         }

    }

 

}

enum Season{

    SPRING,SUMMER,AUTUMN,WINTER;

}