枚举:
其实就是一种特殊的类,一般用于表示多种固定的状态。
public enum 名字{对象1,对象2}
其实枚举类在底层,继承于java.lang.Enum类
protect Enum(String name,int ordinal)
单独的构造方法,程序员无法调用此构造方法,该构造方法由于响应枚举类型声明的编译器发出的代码。
参数:
name--此枚举常量的名称,它是用来声明该常量的标识符
ordinal--枚举常量的序数(它在枚举声明中的位置,其中出事常量序数为零)
枚举类的特点:
1、枚举类很安全,不能被实例化对象,甚至使用反射也不能创建对象
2、可以使用 name() 和 ordinal() 方法用于返回枚举对象的实例名称和序数(从 0 开始)
3、所有的枚举类都有静态方法:value() 可以获取当前枚举类中所有的实例
4、所有的枚举都有静态方法:valueOf 可以把 String 类型的字符串,转换为枚举类型的对象
5、枚举常量必须最先声明,并且常量之间是有逗号隔开的,最后一个常量需要分号(虽然如果后面不添加任何数据的时候,不需要分号,但为了规范,以使用分号为准)
6、枚举类常量之后若使用(),则表示当前枚举类的匿名内部类
7、可以使用 switch 操作枚举
代码示例:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public enum Weekday {
MON("周一",1),
TUES("周二",2),
WED("周三",3),
THUR("周四",4),
FRI("周五",5),
SAT("周六",6),
SUN("周日",7);
private String wik;
private int num;
private Weekday(String wik,int num){
this.wik =wik;
this.num = num;
}
public String getWik() {
return wik;
}
public int getNum() {
return num;
}
public static List<Weekday> getAll(){
return Arrays.asList(Weekday.values());
}
public static List<Integer> getValues(){
List<Integer> list = new ArrayList<>();
Arrays.asList(Weekday.values()).forEach(e->list.add(e.num));
return list;
}
public static List<String> getDesc(){
List<String> list = new ArrayList<>();
Arrays.asList(Weekday.values()).forEach(e->list.add(e.wik));
return list;
}
public static void main(String[] args) {
Weekday.getAll().forEach(System.out::println);
Weekday.getValues().forEach(System.out::println);
Weekday.getDesc().forEach(System.out::println);
}
}