枚举也可以叫枚举类,而枚举其实就是多例是有限个数的,一个类有多个实例,但实例的个数不是无穷的。
定义空枚举实例(简单)
// 首先枚举是一个特殊的class
// 这个class相当于final static修饰、不能被继承
// 他的构造方法强制被私有化
// 所有的枚举都继承自java.lang.Enum类。由于Java不支持多继承,所以枚举对象不能再继承其他类
public enum Color {
RED,GREEN,YELLOW,WHITE,BALCK
}
测试使用枚举类
public class Color1Test {
public static void main(String[] args) {
Color1 c = Color1.BALCK;
System.out.println(c instanceof Color1); // true
}
}
定义枚举类
enum Color2 {
RED, GREEN, BLUE, YELLOW, WHITE, BALCK
}
enum Direction {
LEFT, RIGHT, UP, DOWN;
public int pf(int i) {
return i * i;
}
}
public class Color2Test {
public static void main(String[] args) {
Direction left = Direction.LEFT;
Color2 red = Color2.RED;
System.out.println(red); // red
System.out.println(red.ordinal()); // 0
System.out.println(left); // LEFT
System.out.println(left.pf(9)); // 81
}
}
注意:定义枚举类的关键字是enum,而不是Enum,所有关键字都是小写的!枚举类继承了java.lang.Enum类
其中FRONT、BEHIND、LEFT、RIGHT都是枚举项,它们都是本类的实例,本类一共就只有四个实例对象。
再定义枚举项时,多个枚举项之间使用逗号分隔,最后一个枚举项后需要给出分号!但如果枚举类中只有枚举项(没有构造器、方法、实例变量),那么可以省略分号!建议不要省略分号!
不能使用new来创建枚举类的对象,因为枚举类中的实例就是类中的枚举项,所以再类外只能使用类名,枚举项。
枚举与switch
枚举类型可以在switch语句中应用
public class EnumTest {
public static void main(String[] args) {
Color2 c = Color2.BLUE;
switch (c) {
case RED:
System.out.println("红色");
break;
case GREEN:
System.out.println("绿色");
break;
default:
System.out.println("错误的颜色");
break;
}
}
}
注意:在switch中,不能使用枚举类名称,例如:case color.RED,这样时错误的因为编译器根据switch中的c的类型来判定每个枚举类型,在case中必须直接给出的与d相同类型的枚举选项,而不能在有类型。
枚举类都是Enum的子类
所有的枚举类都是java.lang.Enum
的子类,无需使用extends来继承,如下时枚举类拥有的常用方法