枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型。主要作用是列出常量。
不用枚举类型:
public class DayDemo {
public static final int MONDAY =1;
public static final int TUESDAY=2;
public static final int WEDNESDAY=3;
public static final int THURSDAY=4;
public static final int FRIDAY=5;
public static final int SATURDAY=6;
public static final int SUNDAY=7;
}
上述的常量定义常量的方式称为int枚举模式,这样的定义方式并没有什么错,但它存在许多不足,如在类型安全和使用方便性上并没有多少好处,如果存在定义int值相同的变量,混淆的几率还是很大的,编译器也不会提出任何警告,因此这种方式在枚举出现后并不提倡,现在我们利用枚举类型来重新定义上述的常量,同时也感受一把枚举定义的方式,如下定义周一到周日的常量
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
向enum类添加方法与自定义构造函数
重新定义一个日期枚举类,带有desc成员变量描述该日期的对于中文描述,同时定义一个getDesc方法,返回中文描述内容,自定义私有构造函数,在声明枚举实例时传入对应的中文描述,代码如下:
从上述代码可知,在enum类中确实可以像定义常规类一样声明变量或者成员方法。但是我们必须注意到,如果打算在enum类中定义方法,务必在声明完枚举实例后使用分号分开,倘若在枚举实例前定义任何方法,编译器都将会报错,无法编译通过,同时即使自定义了构造函数且enum的定义结束,我们也永远无法手动调用构造函数创建枚举实例,毕竟这事只能由编译器执行。
public enum RespCode { /** * 0000000 成功 */ E_0000("0000000","成功"), E_1001("1001","密码修改失败"), E_1003("1003","原密码错误"), E_1004("1004","该邮箱尚未注册"), E_1002("1002","该用户不存在"), E_8888("8888","失败"); public String name; public String code; private RespCode(String code, String name) { if(!"0000000".equals(code)){ code="103"+code; } this.name = name; this.code = code; } @Override public String toString() { return this.code+"_"+this.name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public static void main(String[] args) { EnumSet<RespCode> eNums = EnumSet.allOf(RespCode.class); for(RespCode r : eNums){ System.out.println(r.getCode() + "" + r.getName()); } } }