enum是一个全新的“类”。
枚举(Enum): 我们所定义的每个枚举类型都继承自java.lang.Enum类。枚举中的每个成员都是public static final的。
当您使用“enum”定义枚举类型时,实质上您定义出来的类型继承自java.lang.Enum类型,而每个枚举的成员其实就是您定义的枚举类型的一个实例(Instance),他们都被预设为final,所有您无法改变他们,他们也是static成员,所以您可以通过类型名称直接使用他们,当然最重要的,他们都是公开的(public)
换句话说,当定义了一个枚举类型后,在编译时刻就能确定该枚举有几个实例,分别是什么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间已经完全确定下来了。
1、定义一个枚举
public enum Color { Red,White,Blue }
使用枚举
public class ColorTest { public static void main(String[] args) { Color myColor = Color.White; System.out.println(myColor); } }
2、定义一个有成员变量的枚举
public class EnumTest { public static void doOp(OpConstant opConstant){ switch (opConstant) { case TRUN_LEFT: System.out.println("向左转"); break; case TRUN_RIGHT: System.out.println("向右转"); break; case SHOOT: System.out.println("射击"); break; } } public static void main(String[] args) { doOp(OpConstant.SHOOT); } } enum OpConstant{ TRUN_LEFT, TRUN_RIGHT, SHOOT }
定义枚举类型时本质上就是定义一个类别,只不过很多细节编译器帮您完成了。所有在某些程度上,enum关键字的作用就像是class或interface。
3、EnumSet的使用
enum AddressConst{ BEIJING, SHANGHAI, HANGZHOU } public class EnumSetDemo { public static void showEnumSet(EnumSet<AddressConst> enumSet){ for(Iterator<AddressConst> iter = enumSet.iterator(); iter.hasNext();){ System.out.println(iter.next()); } } public static void main(String[] args) { EnumSet<AddressConst> enumSet = EnumSet.of(AddressConst.BEIJING, AddressConst.SHANGHAI); showEnumSet(enumSet); System.out.println("-------"); //出去enumSet的enum实例 showEnumSet(EnumSet.complementOf(enumSet)); } }
EnumSet.noneOf 方法的使用
public class EnumSetDemo2 { public static void showEnumSet(EnumSet<AddressConst> enumSet){ for(Iterator<AddressConst> iter = enumSet.iterator(); iter.hasNext();){ System.out.println(iter.next()); } } public static void main(String[] args) { EnumSet<AddressConst> enumSet = EnumSet.noneOf(AddressConst.class); enumSet.add(AddressConst.BEIJING); enumSet.add(AddressConst.HANGZHOU); showEnumSet(enumSet); } }
4.EnumMap使用
public class EnumMapDemo { public static void main(String[] args) { Map<Action, String> map = new EnumMap<Action, String>(Action.class); map.put(Action.PASUE, "暂停"); map.put(Action.STOP, "停止"); map.put(Action.START, "开始"); for(Action action : Action.values()){ System.out.println(map.get(action)); } } }