1、枚举是什么?

  Java中的枚举其实是一种语法糖,在 JDK 1.5之后出现,用来表示固定且有限个的对象。比如一个季节类有春、夏、秋、冬四个对象;一个星期有星期一到星期日七个对象。这些明显都是固定的,且有限个。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

2、枚举类和普通类的区别

  ①、使用 enum 定义的枚举类默认继承 java.lang.Enum 类,即枚举类是不能再继承别的类了。而普通类的一般父类默认是 Object

  ②、枚举类的构造器只能使用 private 定义,而普通类的还可以用 public 修饰

  ③、枚举类的所有实例必须在枚举类中显示列出(,分隔   ;结尾),列出的实例系统会默认自动添加 public static final 修饰

  ④、所有的枚举类都提供了一个 values() 方法,可以用来遍历枚举值

 

3、怎么用枚举?

   首先我们看,以一个季节类有春、夏、秋、冬四个对象为例:在 JDK 1.5以前是怎么表示的呢?

   创建一个 季节类:

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 public  class  Season {      //属性不能修改,用 final 修饰      private  final  String name;      private  final  String desc;            //因为枚举类的对象是有限的,即我们不能再外面 new Season(),所以构造器私有化      private  Season(String name,String desc) {          this .name = name;          this .desc = desc;      }            //不能再外面new Season(),那么内部必须创建出对象      //外界直接通过类名来访问,用 static 修饰      //外界不能修改,用 final 修饰      public  static  final  Season SPRING =  new  Season( "春天" "春暖花开" );      public  static  final  Season SUMMER =  new  Season( "夏天" "炎炎盛夏" );      public  static  final  Season FALL =  new  Season( "秋天" "秋高气爽" );      public  static  final  Season WINTER =  new  Season( "冬天" "大雪纷飞" );        @Override      public  String toString() {          return  "Season [name="  + name +  ", desc="  + desc +  "]" ;      }             }

  测试:

1 2 3 4 5 6 7 8 9 public  class  SeasonTest {      public  static  void  main(String[] args) {          System.out.println(Season.SPRING);          System.out.println(Season.SUMMER);          System.out.println(Season.FALL);          System.out.println(Season.WINTER);      }   }

  结果为:

1 2 3 4 Season [name=春天, desc=春暖花开] Season [name=夏天, desc=炎炎盛夏] Season [name=秋天, desc=秋高气爽] Season [name=冬天, desc=大雪纷飞]

  

 

使用 Enum 来表示季节类:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public  enum  SeasonEnum {        //必须在第一行写出有哪些枚举值      SPRING( "春天" "春暖花开" ),      SUMMER( "夏天" "炎炎盛夏" ),      FALL( "秋天" "秋高气爽" ),      WINTER( "冬天" "大雪纷飞" );            private  final  String name;      private  final  String desc;            private  SeasonEnum(String name, String desc) {          this .name = name;          this .desc = desc;      }             }

  测试:

1 2 3 4 5 6 7 8 public  static  void  main(String[] args) {                    System.out.println(SeasonEnum.SPRING);  //SPRING          //用 values() 来获取所有的枚举值          for (SeasonEnum s : SeasonEnum.values()){              System.out.println(s);          }      }

  

 

枚举类还能实现接口:

第一步:定义一个接口,方法是返回季节的月份

1 2 3 4 5 public  interface  SeasonEnumImpl {      //用来返回季节的月份      String getMonth();   }

 

第二步:季节类实现接口,并实现接口中的方法

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 30 31 32 33 34 35 36 public  enum  SeasonEnum  implements  SeasonEnumImpl{        //必须在第一行写出有哪些枚举值      SPRING( "春天" "春暖花开" ){          @Override          public  String getMonth() {              return  "12-2" ;          }      },      SUMMER( "夏天" "炎炎盛夏" ){          @Override          public  String getMonth() {              return  "3-5" ;          }      },      FALL( "秋天" "秋高气爽" ){          @Override          public  String getMonth() {              return  "6-8" ;          }      },      WINTER( "冬天" "大雪纷飞" ){          @Override          public  String getMonth() {              return  "9-11" ;          }      };            private  final  String name;      private  final  String desc;            private  SeasonEnum(String name, String desc) {          this .name = name;          this .desc = desc;      } }  

 

测试:

1 2 3 4 5 6 7 8 9 public  static  void  main(String[] args) {                    System.out.println(SeasonEnum.SPRING);  //SPRING                    //用 values() 来获取所有的枚举值          for (SeasonEnum s : SeasonEnum.values()){              System.out.println(s.getMonth());          }      } 

 

结果为:

1 2 3 4 5 SPRING 12 - 2 3 - 5 6 - 8 9 - 11

  

  

 

注意:

①、枚举类可以作为 switch--case 的表达式(JDK 1.5以后)

②、如果枚举类的对象只有一个,那么可以作为单例模式的实现

作者: YSOcean,

1、枚举是什么?

  Java中的枚举其实是一种语法糖,在 JDK 1.5之后出现,用来表示固定且有限个的对象。比如一个季节类有春、夏、秋、冬四个对象;一个星期有星期一到星期日七个对象。这些明显都是固定的,且有限个。

 

2、枚举类和普通类的区别

  ①、使用 enum 定义的枚举类默认继承 java.lang.Enum 类,即枚举类是不能再继承别的类了。而普通类的一般父类默认是 Object

  ②、枚举类的构造器只能使用 private 定义,而普通类的还可以用 public 修饰

  ③、枚举类的所有实例必须在枚举类中显示列出(,分隔   ;结尾),列出的实例系统会默认自动添加 public static final 修饰

  ④、所有的枚举类都提供了一个 values() 方法,可以用来遍历枚举值

 

3、怎么用枚举?

   首先我们看,以一个季节类有春、夏、秋、冬四个对象为例:在 JDK 1.5以前是怎么表示的呢?

   创建一个 季节类:

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 public  class  Season {      //属性不能修改,用 final 修饰      private  final  String name;      private  final  String desc;            //因为枚举类的对象是有限的,即我们不能再外面 new Season(),所以构造器私有化      private  Season(String name,String desc) {          this .name = name;          this .desc = desc;      }            //不能再外面new Season(),那么内部必须创建出对象      //外界直接通过类名来访问,用 static 修饰      //外界不能修改,用 final 修饰      public  static  final  Season SPRING =  new  Season( "春天" "春暖花开" );      public  static  final  Season SUMMER =  new  Season( "夏天" "炎炎盛夏" );      public  static  final  Season FALL =  new  Season( "秋天" "秋高气爽" );      public  static  final  Season WINTER =  new  Season( "冬天" "大雪纷飞" );        @Override      public  String toString() {          return  "Season [name="  + name +  ", desc="  + desc +  "]" ;      }             }

  测试:

1 2 3 4 5 6 7 8 9 public  class  SeasonTest {      public  static  void  main(String[] args) {          System.out.println(Season.SPRING);          System.out.println(Season.SUMMER);          System.out.println(Season.FALL);          System.out.println(Season.WINTER);      }   }

  结果为:

1 2 3 4 Season [name=春天, desc=春暖花开] Season [name=夏天, desc=炎炎盛夏] Season [name=秋天, desc=秋高气爽] Season [name=冬天, desc=大雪纷飞]

  

 

使用 Enum 来表示季节类:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public  enum  SeasonEnum {        //必须在第一行写出有哪些枚举值      SPRING( "春天" "春暖花开" ),      SUMMER( "夏天" "炎炎盛夏" ),      FALL( "秋天" "秋高气爽" ),      WINTER( "冬天" "大雪纷飞" );            private  final  String name;      private  final  String desc;            private  SeasonEnum(String name, String desc) {          this .name = name;          this .desc = desc;      }             }

  测试:

1 2 3 4 5 6 7 8 public  static  void  main(String[] args) {                    System.out.println(SeasonEnum.SPRING);  //SPRING          //用 values() 来获取所有的枚举值          for (SeasonEnum s : SeasonEnum.values()){              System.out.println(s);          }      }

  

 

枚举类还能实现接口:

第一步:定义一个接口,方法是返回季节的月份

1 2 3 4 5 public  interface  SeasonEnumImpl {      //用来返回季节的月份      String getMonth();   }

 

第二步:季节类实现接口,并实现接口中的方法

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 30 31 32 33 34 35 36 public  enum  SeasonEnum  implements  SeasonEnumImpl{        //必须在第一行写出有哪些枚举值      SPRING( "春天" "春暖花开" ){          @Override          public  String getMonth() {              return  "12-2" ;          }      },      SUMMER( "夏天" "炎炎盛夏" ){          @Override          public  String getMonth() {              return  "3-5" ;          }      },      FALL( "秋天" "秋高气爽" ){          @Override          public  String getMonth() {              return  "6-8" ;          }      },      WINTER( "冬天" "大雪纷飞" ){          @Override          public  String getMonth() {              return  "9-11" ;          }      };            private  final  String name;      private  final  String desc;            private  SeasonEnum(String name, String desc) {          this .name = name;          this .desc = desc;      } }  

 

测试:

1 2 3 4 5 6 7 8 9 public  static  void  main(String[] args) {                    System.out.println(SeasonEnum.SPRING);  //SPRING                    //用 values() 来获取所有的枚举值          for (SeasonEnum s : SeasonEnum.values()){              System.out.println(s.getMonth());          }      } 

 

结果为:

1 2 3 4 5 SPRING 12 - 2 3 - 5 6 - 8 9 - 11

  

  

 

注意:

①、枚举类可以作为 switch--case 的表达式(JDK 1.5以后)

②、如果枚举类的对象只有一个,那么可以作为单例模式的实现

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄