网站建设英文文献目录,做服装在哪个网站找,注册建筑工程公司起名大全,学校网站建设目的与意义枚举#xff08;enum#xff09;
enum全称enumeration#xff0c;JDK 1.5中引入的新特性。在Java中#xff0c;被enum关键字修饰的类型就是枚举类型 可以将枚举看成一个类#xff0c;它继承于java.lang.enum类#xff0c;当定义一个枚举类型时#xff0c;每一个枚举类型…枚举enum
enum全称enumerationJDK 1.5中引入的新特性。在Java中被enum关键字修饰的类型就是枚举类型 可以将枚举看成一个类它继承于java.lang.enum类当定义一个枚举类型时每一个枚举类型成员都可以看作是枚举类型的一个实例枚举类型成员默认被public static final修饰所有的枚举值都是类静态常量所以当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。
enum Color { RED, GREEN, BLUE }如果枚举不添加任何方法枚举值默认为从0开始的有序数值。以Color枚举类型举例它的枚举常量依次为RED0GREEN1BLUE2。
枚举的好处可以将常量组织起来统一进行管理 枚举的典型应用场景错误码、状态机等 特性除了不能继承基本上可以将enum看做一个常规的类 作用
枚举是一种规范它规范了参数的形式这样就可以不用考虑类型的不匹配并且显式的替代了int型参数可能带来的模糊概念。枚举像一个类又像一个数组。 优势
1类型安全 2紧凑有效的数据定义 3可以和程序其他部分完美交互 4运行效率高 本质
尽管enum看起来像是一种新的数据类型事实上enum是一种受限制的类并且具有自己的方法。创建enum时编译器会生成一个相关的类这个类继承自java.lang.Enum 构造方法
在枚举类型中可以添加构造方法但是规定这个构造方法必须为private修饰符或者默认修饰符所修饰
public enum Color {RED(1, 红色), GREEN(2, 绿色), RED_ONE(1);private int index;private String value;private Color() {// 无参构造}private Color(int index) {this.index index;}private Color(int index, String value) {// 有参构造this.index index;this.value value;}
}保存枚举值应该是要保存int值如果保存字符串在使用中英文切换可能就会出问题 枚举类型可以实现一个或多个接口但是不能继承类。因为编译器会默认将枚举类型继承自java.lang.Enum类这一过程由编译器完成 枚举类型中的常量成员必须在其他成员之前定义否则这个枚举类型不会产生对象 方法
方法描述values()返回enum实例的数组。数组中的元素严格保持在enum中声明时的顺序name()返回实例名ordinal()返回实例声明时的次序从0开始getDeclaringClass()返回实例所属的enum类型equals()判断是否为同一个对象可以使用来比较enum实例。此外java.lang.Enum实现了Comparable和 Serializable 接口所以也提供 compareTo()方法
为枚举显示的赋值 Java不允许使用 为枚举常量赋值 enum可以添加普通方法、静态方法、抽象方法、构造方法
Java虽然不能直接为实例赋值但是它有更优秀的解决方案为enum添加方法来间接实现显示赋值。创建enum时可以为其添加多种方法甚至可以为其添加构造方法
注意如果要为enum定义方法那么必须在enum的最后一个实例尾部添加一个分号。此外在enum中必须先定义实例不能将字段或方法定义在实例前面。否则编译器会报错 常见用法
1.常量
枚举可以把相关的常量分组到一个枚举类型里而且枚举提供了比常量更多的方法
public enum Color { RED, GREEN, BLANK, YELLOW
}2.Switch
JDK1.6之前的switch语句只支持int,char,enum类型使用枚举能让代码可读性更强
enum Color { GREEN, YELLOW, RED
} class TrafficLight { Color color Color.RED; public void change() { switch (color) { case RED: color Color.GREEN; break; case YELLOW: color Color.RED; break; case GREEN: color Color.YELLOW; break; } } }3.向枚举中添加新方法
public enum Color {RED(1, 红色), GREEN(2, 绿色), BLANK(3, 白色), YELLO(4, 黄色);// 成员变量private int index;private String name;private Color(int index, String name) {// 构造方法this.name name;this.index index;}// 普通方法public static String getName(int index) { //定义了才能使用RED(1, 红色)for (Color c : Color.values()) {if (c.getIndex() index) {return c.name;}}return null;}// getter、setterpublic String getName() {return name;}public void setName(String name) {this.name name;}public int getIndex() {return index;}public void setIndex(int index) {this.index index;}
}4.覆盖枚举的方法
toString()方法覆盖
public enum Color {RED(1, 红色), GREEN(2, 绿色), BLANK(3, 白色), YELLO(4, 黄色);// 成员变量private int index;private String name;private Color(int index, String name) {// 构造方法this.name name;this.index index;}Overridepublic String toString() {// 覆盖toString方法return this.index _ this.name;}
}5.实现接口
所有的枚举都继承自java.lang.Enum类。由于Java不支持多继承所以枚举对象不能再继承其他类
interface Behaviour {void print();String getInfo();
}public enum Color implements Behaviour {RED(1, 红色), GREEN(2, 绿色), BLANK(3, 白色), YELLO(4, 黄色);// 成员变量private int index;private String name;private Color(int index, String name) {// 构造方法this.name name;this.index index;}Overridepublic String getInfo() {//接口方法 return this.name;}Overridepublic void print() {// 接口方法System.out.println(this.index : this.name);}
}6.使用接口组织枚举
public interface Food { enum Coffee implements Food{ BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO } enum Dessert implements Food{ FRUIT, CAKE, GELATO }
}7.枚举集合
java.util.EnumSet和java.util.EnumMap是两个枚举集合 EnumSet保证集合中的元素不重复EnumMap中的 key是enum类型而value则可以是任意类型 枚举遍历
for (RnumTest e : RnumTest.values()) {System.out.println(e.toString());
}上一篇Java IO数据流 下一篇Java泛型