1、 认识枚举
就是要让某个类型的变量的取值只能位若干个固定值中的一个,否则编译器就会报错,枚举可以让编译器在编译时就可以控制源程序赋给非法值,使用普通变量的方式在开发阶段无法实现这一目标。
在JDK1.5 之后,使用关键字enum 定义一种新的类型,称为枚举类型
2、 Enum 类与enum 关键字
public enum Color {
RED,GREEN,BLUE;
}
public Color colorEnum;
@Test
public void test2(){
colorEnum = Color.RED;
colorEnum = Color.BLUE;
colorEnum = Color.GREEN;
System.out.println(colorEnum);
System.out.println("name "+colorEnum.name());
System.out.println("ordinal "+colorEnum.ordinal());
System.out.println(colorEnum.toString());
System.out.println("+++++");
Color[] values = Color.values();
System.out.println(Arrays.toString(values));
}
}
3、 集合对枚举的支持
public void test3(){
EnumSet<Color> set = EnumSet.allOf(Color.class);
for(Color c : set){
System.out.println(c);
}
EnumMap<Color,String> map = new EnumMap<>(Color.class);
map.put(Color.red,"red");
map.put(Color.green,"green");
map.put(Color.BLUE,"blur");
}
4、 带构造方法的枚举
5、 让枚举实现接口
6、 在枚举中定义抽象方法
public class EnumDemo {
public static final int RED = 0x1;
public static final int GREEN = 0x2;
public static final int BLUE = 0x3;
public int color;
@Test
public void test1() {
color = RED;
color = 4;
}
public Color colorEnum;
@Test
public void test2() {
colorEnum = Color.RED;
colorEnum = Color.BLUE;
colorEnum = Color.GREEN;
System.out.println(colorEnum);
System.out.println("name " + colorEnum.name());
System.out.println("ordinal " + colorEnum.ordinal());
System.out.println(colorEnum.toString());
System.out.println("+++++");
Color[] values = Color.values();
System.out.println(Arrays.toString(values));
}
@Test
public void test3() {
EnumSet<Color> set = EnumSet.allOf(Color.class);
for (Color c : set) {
System.out.println(c);
}
EnumMap<Color, String> map = new EnumMap<>(Color.class);
map.put(Color.RED, "red");
map.put(Color.GREEN, "green");
map.put(Color.BLUE, "blur");
}
@Test
public void test4() {
System.out.println(Color.RED.getColor2());
System.out.println(Color.RED.getColor());
}
}
public interface Info {
public int getColor();
}
ublic enum Color implements Info{
RED(10){
@Override
public String getColor2() {
return "red";
}
},GREEN(20) {
@Override
public String getColor2() {
return "green";
}
},BLUE {
@Override
public String getColor2() {
return "blue";
}
};
private int color;
private Color(){
System.out.println("无参构造器");
}
private Color(int color){
this.color = color;
System.out.println("有参构造器");
}
@Override
public int getColor() {
return color;
}
public abstract String getColor2();
}