枚举
关键字:enum,与class,interface是一个级别,本质上就是一个类,只是能控制这个类的实例数量(故而属性无参有参构造都用private,这样避免外部去实例化对象造成实例数量不固定)
创建枚举实例-调用无参构造
//红绿蓝枚举,只有三个实例,默认调用无参构造,三个实例也就调用三次无参构造 public enum ColorEnum { RED,GREEN,BLUE }
创建枚举实例-调用有参构造
1. 枚举可以有实例化属性,无参/有参构造方法,抽象方法。(注意看代码中的注释)
package com.hudong.enumtest; import java.lang.Enum; public enum ColorEnum { //RED,GREEN,BLUE调用有参构造,YELLOW调用无参构造 //有属性方法时,记得在枚举实例序列的最后一个添加分号,代表枚举实例结束 RED("00","红色"),GREEN("01","绿色"),BLUE("02","蓝色"),YELLOW; private String code; private String name; private ColorEnum(){ System.out.println("默认调用无参构造"); } private ColorEnum(String code, String name) { this.code = code; this.name = name; } public static String getName(String code) { //枚举在编译的时候才会插入一些方法,比如values()方法 for(ColorEnum color:ColorEnum.values()) { if(color.getCode().equals(code)) { return color.name; } } return null; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2.有抽象方法的有参调用枚举
package com.hudong.enumtest; import java.lang.Enum; public enum ColorEnum2 { //RED,GREEN,BLUE调用有参构造,YELLOW调用无参构造 //有属性方法时,记得在枚举实例序列的最后一个添加分号,代表枚举实例结束 RED("00","红色"){ @Override public void getInfo() { } },GREEN("01","绿色"){ @Override public void getInfo() { } },BLUE("02","蓝色"){ @Override public void getInfo() { } },YELLOW{ @Override public void getInfo() { } }; private String code; private String name; private ColorEnum2(){ System.out.println("默认调用无参构造"); } private ColorEnum2(String code, String name) { this.code = code; this.name = name; } //抽象方法 public abstract void getInfo(); public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } }