枚举
枚举指的是在一定范围内取值,这个值必须是枚举类型中的任意一个,而且只能取一个
枚举的特点:
1.必须在规定的范围内取值
2.这个值只能取一个
枚举的本质就是一个类
枚举既然本质是一个类,那么枚举里面有没有 成员变量,成员方法,构造方法,静态方法,抽象方法? 有的话又有意义吗?
1.枚举的构造方法必须私有
2.枚举当中默认有一个私有的无参构造方法,如果你写了一个带参的构造方法,那么会覆盖无参构造方法,所以编译报错
3.枚举里面的抽象方法是有意义的,其他成员没有意义
4.枚举的前面必须是枚举的常量成员
/*
* 使用枚举来描述一个星期有多少天
* 并且要求使用枚举的响应方法来告诉是星期几
*/
public class Practice01 {
public static void main(String[] args) {
Week week = Week.SATURDAY;
switch (week) {
case MONDAY:
week.desc();
break;
case TUESDAY:
week.desc();
break;
case WEDNESDAY:
week.desc();
break;
case THURSDAY:
week.desc();
break;
case FRIDAY:
week.desc();
break;
case SATURDAY:
week.desc();
break;
case SUNDAY:
week.desc();
break;
default:
break;
}
}
}
//Monday Tuesday Wednesday Thursday Friday Saturday Sunday
enum Week {
MONDAY {
@Override
public void desc() {
System.out.println("星期一");
}
},
TUESDAY {
@Override
public void desc() {
System.out.println("星期二");
}
},
WEDNESDAY {
@Override
public void desc() {
System.out.println("星期三");
}
},
THURSDAY {
@Override
public void desc() {
System.out.println("星期四");
}
},
FRIDAY {
@Override
public void desc() {
System.out.println("星期五");
}
},
SATURDAY {
@Override
public void desc() {
System.out.println("星期六");
}
},
SUNDAY {
@Override
public void desc() {
System.out.println("星期天");
}
};
public abstract void desc();
}
枚举类型方法
- String name() 返回枚举的名称
- int ordinal() 返回枚举的索引
- static <T extends Enum> T valueOf(Class enumType, String name) 返回枚举对象
- valueOf(String name) 生成枚举对象
- values() 返回所有的枚举对象的数组
public class EnumDemo04 {
public static void main(String[] args) {
// 获取枚举对象
// Weekend w = Weekend.valueOf(Weekend.class, "MONDAY");
// System.out.println(w);
//
// // 获取枚举对象
// Weekend w2 = Weekend.MONDAY;
// System.out.println(w2);
//
// // 获取枚举对象
// Weekend w3 = Weekend.valueOf("MONDAY");
// System.out.println(w3);
// medhod1();
// method2();
method3();
}
/**
* 1.已知枚举对象,获取枚举的名称和索引
*/
public static void medhod1() {
Weekend w = Weekend.TUESDAY;
String name = w.name();
int index = w.ordinal();
System.out.println(w);
System.out.println(name);
System.out.println(index);
}
/**
* 2.已经枚举的名称,获取到枚举的对象和下标
*/
public static void method2() {
String name = "MONDAY";
Weekend w = Weekend.valueOf(name);
int index = w.ordinal();
System.out.println(name);
System.out.println(w);
System.out.println(index);
}
/**
* 3.已知枚举的下标,获取到枚举的名称和枚举对象
*/
public static void method3() {
int index = 2;
Weekend[] ws = Weekend.values();
Weekend w = ws[index];
String name = w.name();
System.out.println(index);
System.out.println(w);
System.out.println(name);
}
}