•JDK1.5之后可以借助enum关键字定义枚举类型,语法结构如下:
[public] enum 枚举名称 [implements 接口列表] {
枚举对象1[,枚举对象2] [,…];
[成员变量1;]
[成员变量2;]
[…]
[(静态或非静态)代码块]
[构造方法1]
[构造方法2]
[…]
[普通方法1]
[普通方法2]
[…]
[抽象方法1]
[抽象方法2]
[…]
}
其中我们可以看到,枚举对象,放在有效代码的第一行,在这里,不允许其他代码块或方法或者属性放在枚举对象的前面,同时,定义枚举有以下几种形式
public enum Color {
RED, GREEN, BLUE;// 定义三个枚举对象
}
public enum Color {
RED(1, "红色"), GREEN(2, "绿色"), BLUE(3, "蓝色");
//属性为私有属性,为了确保数据的安全
private int value;
private String label;
//构造方法为私有类型,public会出错
private Color(int value, String label) {
this.value = value;
this.label = label;
}
//通过公共的get和set方法来修改和获取枚举
public int getValue() {
return value;
}
public String getLabel() {
return label;
}
}
enum Color {
RED {
public String getLabel() {
return "红颜色";
}
},
GREEN {
public String getLabel() {
return "绿颜色";
}
};
//可以直接在枚举中定义抽象方法,此时每个枚举对象需要实现该抽象方法
public abstract String getLabel();
}
public class Test {
public static void main(String[] args) {
//for each加强循环
for (Color color : Color.values()) {
String label = color.getLabel();
System.out.println(label);
}
}
}
具体解释看代码上方的说明,同时,获取枚举也有下列几种方式
package com.test.csdn;
enum Color {
GREEN,BLUE,YELLOW;
}
public class Test {
public static void main(String[] args) {
//直接获取单个
// Color color = Color.BLUE;
// System.out.println(color);
//获取多个枚举对象
Color []colors = Color.values();
for (Color color : colors) {
System.out.println(color);
}
}
}
switch在枚举中的运用
package com.test.csdn;
enum Color {
GREEN,BLUE,YELLOW;
public static void print(Color color) {
switch(color) {
case GREEN:
System.out.println("绿色");
break;
case BLUE:
System.out.println("蓝色");
break;
case YELLOW:
System.out.println("黄色");
break;
}
}
}
public class Test {
public static void main(String[] args) {
for(Color color : Color.values()) {
Color.print(color);
}
}
}
关于enum关键字与Enum类:Enum类是一个抽象类,该类是Java 语言枚举类型的父类,即enum关键字自定义的枚举类型相当于定义一个继承java.lang.Enum抽象类的子类。
package com.test.csdn;
enum Color {
GREEN,BLUE,YELLOW;
}
public class Test {
public static void main(String[] args) {
for (Color color : Color.values()) {
int ordinal = color.ordinal();
String name = color.name();
System.out.println(ordinal + " ——> " + name);
}
}
}
枚举我知道的东西暂时只有这么多,等以后知道的更多了再来补充