Java中枚举类型具有以下特性:
- Java枚举类型是一种类,是引用类型,具有了面向对象特性,可以添加方法和成员变量等。
- Java枚举类型父类是java.lang.Enum,不需要显式声明。
- Java枚举类型可以实现接口,与类实现接口类似。
- Java枚举类型不能被继承,不存在子类。
枚举类声明
语法格式如下:
[public] enum 枚举名{
枚举常量列表
}
最简单形式的枚举类
例:采用枚举类来表示工作日。
WekDs.java
package java_11_30;
public enum WekDs {
// 枚举常量列表
MONDAY, TUESDAY, WEDENSDAY, THURSDAY, FRIDAY
}
WeekDays.java
package java_11_30;
public class WeekDays {
public static void main(String[] args) {
// TODO Auto-generated method stub
WekDs d = WekDs.FRIDAY;
System.out.println(d);
switch (d) {
case MONDAY:
System.out.println("星期一");
break;
case TUESDAY:
System.out.println("星期二");
break;
case WEDENSDAY:
System.out.println("星期三");
break;
case THURSDAY:
System.out.println("星期四");
break;
case FRIDAY:
System.out.println("星期五");
break;
default:
System.out.println("星期五");
break;
}
}
}
控制台输出:
FRIDAY
星期五
赋值表达式是“枚举类型名.枚举常量”的形式。
枚举类中成员变量和成员方法
枚举类的成员方法可以是实例方法、静态方法,但不能是抽象方法。
示例代码如下:
WkDays.java
package java_11_30;
public enum WkDays {
// 枚举常量列表
MONDAY, TUESDAY, WEDENSDAY, THURSDAY, FRIDAY; // ①
// 实例变量
private String dayName;
private int index;
// 静态变量
private static int staticVar = 100;
// 覆盖父类中的toString()方法
@Override
public String toString() {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
sb.append(dayName);
sb.append("-");
sb.append(index);
return sb.toString();
}
// 实例方法
public String getInfo() {
// TODO Auto-generated method stub
return super.toString();
}
// 静态方法
public static int getStaticVar() {
return staticVar;
}
}
添加其它成员的枚举类需要注意,“枚举常量列表”语句必须是枚举类中的第一行代码。而且“枚举常量列表”语句后面要加分号(;)表示语句的结束,见代码第①行。
WDs.java
package java_11_30;
public class WDs {
@SuppressWarnings("static-access")
public static void main(String[] args) {
// TODO Auto-generated method stub
WkDays days = WkDays.FRIDAY;
// 打印day默认调用枚举toString()方法
System.out.println(days);
// 调用枚举实例方法
System.out.println(days.getInfo());
// 调用枚举静态方法
System.out.println(days.getStaticVar());
}
}
上述代码比较简单,这里不再赘述。
枚举类构造方法
package java_11_30;
public enum W {
MONDAY("星期一", 0), TUESDAY("星期二", 0), WENDENSDAY("星期三", 0), THURSDAY("星期四", 0), FRIDAY("星期五", 0),;
private String name;
private int index;
private static int staticVar = 100;
private W(String name, int index) { //构造方法
// TODO Auto-generated constructor stub
this.name = name;
this.index = index;
}
@Override
public String toString() {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
sb.append(name);
sb.append("-");
sb.append(index);
return sb.toString();
}
// 实例方法
private String getInfo() {
// TODO Auto-generated method stub
return super.toString();
}
// 静态方法
public static int getStaticVar() {
return staticVar;
}
}
枚举常用方法
所有的枚举类都继承java.lang.Enum类。
package java_11_30;
public class HelloWorld {
public static void main(String[] args) {
// TODO Auto-generated method stub
WeekDs[] allValues = WeekDs.values();
// 遍历枚举常量数值
for (WeekDs value : allValues) {
System.out.printf("%d - %s\n", value.ordinal(), value);
}
// 创建WeekDs对象
WeekDs day1 = WeekDs.FRIDAY;
WeekDs day2 = WeekDs.valueOf("FRIDAY");
System.out.println(day1 == WeekDs.FRIDAY);
System.out.println(day1.equals(WeekDs.FRIDAY));
System.out.println(day1 == day2);
}
}
通过本章的学习,我们可以了解到Java中枚举的作用、特点和常用方法。重点是声明和使用枚举类。