枚举类
枚举类:就是对象的实例个数是确定的(例如:单例模式),也就说我们在创建枚举类的时候,会对构造器进行设置
一、自定义创建枚举类
1 package com.atguigu.java1; 2 3 public class TestSeason { 4 public static void main(String[] args) { 5 Season spring = Season.SPRING; 6 System.out.println(spring); 7 spring.show(); 8 System.out.println(spring.getSeasonName()); 9 } 10 } 11 //枚举类 12 class Season{ 13 //1.提供类的属性,声明为private final 14 private final String seasonName; 15 private final String seasonDesc; 16 //2.声明为final的属性,在构造器中初始化。 17 private Season(String seasonName,String seasonDesc){ 18 this.seasonName = seasonName; 19 this.seasonDesc = seasonDesc; 20 } 21 //3.通过公共的方法来调用属性 22 public String getSeasonName() { 23 return seasonName; 24 } 25 public String getSeasonDesc() { 26 return seasonDesc; 27 } 28 //4.创建枚举类的对象:将类的对象声明public static final 29 public static final Season SPRING = new Season("spring", "春暖花开"); 30 public static final Season SUMMER = new Season("summer", "夏日炎炎"); 31 public static final Season AUTUMN = new Season("autumn", "秋高气爽"); 32 public static final Season WINTER = new Season("winter", "白雪皑皑"); 33 @Override 34 public String toString() { 35 return "Season [seasonName=" + seasonName + ", seasonDesc=" 36 + seasonDesc + "]"; 37 } 38 public void show(){ 39 System.out.println("这是一个季节"); 40 } 41 }
二、使用 enum 关键字创建枚举类
(必须将生命的对象放在最前面,同时去掉重复的部分)并且之间用逗号隔开。其他与我们之前创建时一致的。
1 //枚举类 2 enum Season1{ 3 SPRING("spring", "春暖花开"), 4 SUMMER("summer", "夏日炎炎"), 5 AUTUMN("autumn", "秋高气爽"), 6 WINTER("winter", "白雪皑皑"); 7 8 private final String seasonName; 9 private final String seasonDesc; 10 11 private Season1(String seasonName,String seasonDesc){ 12 this.seasonName = seasonName; 13 this.seasonDesc = seasonDesc; 14 } 15 public String getSeasonName() { 16 return seasonName; 17 } 18 public String getSeasonDesc() { 19 return seasonDesc; 20 } 21 22 @Override 23 public String toString() { 24 return "Season [seasonName=" + seasonName + ", seasonDesc=" 25 + seasonDesc + "]"; 26 } 27 }
三、枚举类中主要使用的两个方法
1 //1.values():已数组的方式,获取所有的枚举成员 2 Season1[] seasons = Season1.values(); 3 for(int i = 0;i < seasons.length;i++){ 4 System.out.println(seasons[i]); 5 } 6 //2.valueOf(String name):要求传入的形参name是枚举类对象的名字,获取枚举对象。 7 //否则,报java.lang.IllegalArgumentException异常 8 String str = "WINTER"; 9 Season1 sea = Season1.valueOf(str);
四、实现接口
特殊之处在于,当每一对象需要单独实现 show 方法时,可以通过{}的形式,来完成需求。
1 interface Info{ 2 void show(); 3 } 4 //枚举类 5 enum Season1 implements Info{ 6 SPRING("spring", "春暖花开"){ 7 public void show(){ 8 System.out.println("春天在哪里?"); 9 } 10 }, 11 SUMMER("summer", "夏日炎炎"){ 12 public void show(){ 13 System.out.println("生如夏花"); 14 } 15 }, 16 AUTUMN("autumn", "秋高气爽"){ 17 public void show(){ 18 System.out.println("秋天是用来分手的季节"); 19 } 20 }, 21 WINTER("winter", "白雪皑皑"){ 22 public void show(){ 23 System.out.println("冬天里的一把火"); 24 } 25 };