JDK1.5引入了新的类型——枚举。
在JDK1.5 之前,我们定义常量都是: public static fianl....(这种方式在现在项目中也很常见) 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
public enum Color {
RED,BLANK,YELLOW
}
public class Test {
public static void main(String[] args) {
System.out.println(Color.BLANK.toString());
System.out.println(Color.BLANK);
}
}
当然,枚举不仅仅是只可以用来做常量。还可以作为switch语句使用。
public static void main(String[] args) {
Color color = Color.RED;
switch (color) {
case BLANK:
System.out.println("黑色");
break;
case RED:
System.out.println("红色");
break;
default:
break;
}
}
枚举类型全都都默认继承自java.lang.Enum,所以枚举类型是无法再次继承的,只能实现接口。并且枚举类型规定构造方法必须私有,也保证了枚举的都是单例的。
枚举类型可以添加方法,重写方法,实现接口等。
public interface DayInterface {
public String getDay();
}
public enum MyDay implements DayInterface{
MONDAY(1,"星期一"),THUSDAY(2,"星期二");//枚举类型的实例
private int code;
private String name;
private MyDay(int code,String name) {
this.code = code;
this.name = name();
}
//添加自定义方法
public int getCode() {
return code;
}
public String getName() {
return name;
}
public void setCode(int code) {
this.code = code;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {//重写toString
return this.getName()+"---"+this.getCode();
}
@Override
public String getDay() {//实现接口方法
return this.getName();
}
}
public class Test {//测试
public static void main(String[] args) {
System.out.println(MyDay.THUSDAY.getDay());//使用枚举
}
}
枚举类型的遍历:
for(EnumsTest rate:EnumsTest.values()){
System.out.println(rate.getType());
}
1.枚举类型对象之间的值比较,是可以使用==,直接来比较值,是否相等的,不是必须使用equals方法。
2.Enum抽象类常见方法
Enum是所有 Java 语言枚举类型的公共基本类(注意Enum是抽象类),以下是它的常见方法:
返回类型 | 方法名称 | 方法说明 |
---|---|---|
int | compareTo(E o) | 比较此枚举与指定对象的顺序 |
boolean | equals(Object other) | 当指定对象等于此枚举常量时,返回 true。 |
Class<?> | getDeclaringClass() | 返回与此枚举常量的枚举类型相对应的 Class 对象 |
String | name() | 返回此枚举常量的名称,在其枚举声明中对其进行声明 |
int | ordinal() | 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零) |
String | toString() | 返回枚举常量的名称,它包含在声明中 |
static<T extends Enum<T>> T | static valueOf(Class<T> enumType, String name) | 返回带指定名称的指定枚举类型的枚举常量。 |