JavaSE学习笔记——枚举类
2020-02-14 本文已影响0人
funOfFan
- 如何自定义枚举类
- 私有化类构造器,保证不能在类外部创建对象实例。
- 在类的内部创建枚举类的对象实例,声明为private public staic final。
- 如果必要,设置类属性,属性声明为private final,也就没有set方法了,
因为各个属性值在对象实例创建的时候,就已经被构造器赋值了。
- enum关键字的使用
- 声明enum类
enum SeasonEnum{ SPRING("spring","春暖花开"), SUMMER("summer", "烈日炎炎"), FALL ("autumn", "秋风萧瑟"), WINTER("winter","冰天雪地"); private final String seasonName; private final String seasonDesc; //此处的属性,只有get方法,没有set方法 public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return seasonDesc; } private SeasonEnum(String aName, String aDesc){ this.seasonName = aName; this.seasonDesc = aDesc; }
- values()
//返回的是对应枚举类型的一个数组 SeasonEnum[] seasons = SeasonEnum.values(); for (int i = 0; i < seasons.length; i++) { System.out.println(seasons[i]); }
- valueOf(String name)
//valueOf传入一个形参,该形参的名称是枚举类内部对象实例的名称 //否则报java.IllegalArgumentException异常 String str = "WINTER"; SeasonEnum season = SeasonEnum.valueOf(str); System.out.println(season);
- 枚举类实现接口的两种方式
- 类内部各个对象实例共享同一套该接口的抽象方法的实现。
interface info{ void show(); } //枚举类 enum SeasonEnum implements info { SPRING("spring","春暖花开"), SUMMER("summer", "烈日炎炎"), FALL ("autumn", "秋风萧瑟"), WINTER("winter","冰天雪地"); private final String seasonName; private final String seasonDesc; private SeasonEnum(String aName, String aDesc){ this.seasonName = aName; this.seasonDesc = aDesc; } public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return seasonDesc; } @Override public void show() { System.out.println("这是一个季节"); } } //这种方式中,无论通过哪个实例调用show方法,都只会输出“这是一个季节”。
- 让类的每个对象实例,都实现接口的抽象方法,在通过对象实例调用被
重写的抽象方法的时候,执行的效果不同。
interface info{ void show(); } enum SeasonEnum implements info { SPRING("spring","春暖花开"){ @Override public void show() { System.out.println("春天在哪里"); } }, SUMMER("summer", "烈日炎炎"){ @Override public void show() { System.out.println("夏天在哪里"); } }, FALL ("autumn", "秋风萧瑟"){ @Override public void show() { System.out.println("秋天在哪里"); } }, WINTER("winter","冰天雪地"){ @Override public void show() { System.out.println("冬天在哪里"); } }; private final String seasonName; private final String seasonDesc; private SeasonEnum(String aName, String aDesc){ this.seasonName = aName; this.seasonDesc = aDesc; } }