枚举类
枚举类本质上是一个类,只不过这个类的对象是有限个的,不能让用户随便创建
枚举类的例子很多,比如说星期、月份、性别、订单状态、支付方式、线程状态等
开发中,如果针对于某个类,其实例是确定个数的,则推荐将此类声明为枚举类
如果枚举类的实例只有一个,则可以看作是单例的实现方式
枚举类方法
| 方法名 |
说明 |
| toString() |
在重写前,返回被调用的对象。可通过重写显示想要的内容 |
| name() |
和没重写的toString()功能相同,返回当前对象的内容 |
| values() |
返回枚举类型所有对象,通常用来遍历枚举类型用 |
| valueOf(String objName) |
根据对象名找到该对象 |
| ordinal() |
此方法非静态,用来查询此对象在枚举类生成次序 |
在实际开发中,枚举类型其实只需要这样写,代表着一个只有四个类型的构造类型
1 2 3 4
| public enum Status { BUSY,FREE,VOCATION,DIMISSION; }
|
枚举类实例
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 37 38 39 40 41 42 43 44 45
| public class SeasonTest1 { public static void main(String[] args) { System.out.println(Season1.SPRING.name()); System.out.println(Season1.SUMMER); Season1[] values = Season1.values(); for (Season1 value : values) { System.out.println(value); }
System.out.println(Season1.valueOf("AUTUMN")); } }
enum Season1 { SPRING("春天", "春暖花开"), SUMMER("夏天", "夏日炎炎"), AUTUMN("秋天", "秋高气爽"), WINTER("冬天", "白雪皑皑"); private final String seasonName; private final String SeasonDesc; private Season1(String seasonName, String seasonDesc) { this.seasonName = seasonName; SeasonDesc = seasonDesc; } public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return SeasonDesc; } @Override public String toString() { return "Season1{" + "seasonName='" + seasonName + '\'' + ", SeasonDesc='" + SeasonDesc + '\'' + '}'; } }
|
枚举类实现接口操作
- 枚举类实现接口,直接在枚举类中重写接口的抽象方法,使用不同的枚举类对象调用此方法时,执行的同一个方法
- 枚举类实现接口,在枚举类的每一个实例中重写接口的抽象方法,使得不同的实例在调用该方法时执行不同的方法
枚举类实现接口实例
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
public class SeasonTest3 { public static void main(String[] args) { Season1.SPRING.show(); Season1.SUMMER.show(); Season1.AUTUMN.show(); Season1.WINTER.show(); } } interface Show{ public void show(); } enum Season1 implements Show{ SPRING("春天", "春暖花开"){ @Override public void show() { System.out.println("春天在哪里"); } }, SUMMER("夏天", "夏日炎炎"){ @Override public void show() { System.out.println("宁静的夏天"); } }, AUTUMN("秋天", "秋高气爽"){ @Override public void show() { System.out.println("秋意浓"); } }, WINTER("冬天", "白雪皑皑"){ @Override public void show() { System.out.println("大约在冬季"); } }; private final String seasonName; private final String SeasonDesc; Season1(String seasonName, String seasonDesc) { this.seasonName = seasonName; SeasonDesc = seasonDesc; } public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return SeasonDesc; } @Override public String toString() { return "meijulei.Season1{" + "seasonName='" + seasonName + '\'' + ", SeasonDesc='" + SeasonDesc + '\'' + '}'; } }
|
在对象中可以直接重写类中方法