枚举类型在JDK 5时引入。java
enum WeekEnum { MONDAY, TUESDAY, WEDNESDAY, THURDAY, FRIDAY, SATURDAY, SUNDAY }
Java的枚举类java.lang.Enum中,有:
|--private final String name;(定义时可表意的标识符)
|--private final int ordinal;(序数,从0开始)
|--及对应的获取方法。this
public class Enum1Common { enum WeekEnum { MONDAY, TUESDAY, WEDNESDAY, THURDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String[] args) { System.out.println("枚举类型标识符:" + WeekEnum.FRIDAY); for (WeekEnum day : WeekEnum.values()) { System.out.print("直接输出:" + day);// toString() System.out.print("\t name:" + day.name()); System.out.println("\t ordinal:" + day.ordinal());// 序数 } } }
枚举类型标识符:FRIDAY
直接输出:MONDAY name:MONDAY ordinal:0
直接输出:TUESDAY name:TUESDAY ordinal:1
直接输出:WEDNESDAY name:WEDNESDAY ordinal:2
直接输出:THURDAY name:THURDAY ordinal:3
直接输出:FRIDAY name:FRIDAY ordinal:4
直接输出:SATURDAY name:SATURDAY ordinal:5
直接输出:SUNDAY name:SUNDAY ordinal:6code
枚举类型是一种“特殊的类”,
它能够有本身的属性和方法(包括构造方法)。
枚举类的构造器只能使用private访问控制符;
若是省略访问控制符,仍是private。继承
// 枚举类也能够有变量和方法 public class Enum2Member { public static void main(String[] args) { System.out.println(GenderEnum.MALE + ":" + GenderEnum.MALE.getLabel()); // Enum.valueOf():获取指定枚举类的枚举值 GenderEnum g = Enum.valueOf(GenderEnum.class, "FEMALE"); System.out.println(g + ":" + g.getLabel()); } } enum GenderEnum { MALE("男"), FEMALE("女");// 必须第一行 // ---------------------------------- // 枚举类的属性值应该使用private final修饰 private final String label; // 枚举类一旦写带参构造器(必须private),列出枚举值时必须传参 private GenderEnum(String label) { this.label = label; } public String getLabel() { return this.label; } }
MALE:男 FEMALE:女
// 枚举类能够继承接口 public class Enum3Impl { public static void main(String[] args) { System.out.println(ImplEnum.PLUS.eval(3, 2)); System.out.println(ImplEnum.MINUS.eval(3, 2)); } } interface IOperation { double eval(double x, double y); } enum ImplEnum implements IOperation { PLUS { public double eval(double x, double y) { return x + y; } }, MINUS { public double eval(double x, double y) { return x - y; } } }
5.0 1.0
枚举类自己能够定义抽象方法,由各枚举值实现。接口
// 枚举类能够定义“抽象方法”,并由枚举值实现 public class Enum4Abstract { public static void main(String[] args) { System.out.println(AbstractEnum.TIMES.eval(3, 2)); System.out.println(AbstractEnum.DIVIDE.eval(3, 2)); } } enum AbstractEnum { TIMES { public double eval(double x, double y) { return x * y; } }, DIVIDE { public double eval(double x, double y) { return x / y; } }; // 定义抽象方法(必须在枚举值以后定义) // 由各枚举值 提供 具体实现 public abstract double eval(double x, double y); }
6.0 1.5