枚举类的使用
枚举
1.1 什么情况下使用枚举类
当一个类的对象是固定的并且个数是有限的
1.2 枚举类体验
声明枚举类的关键字是enum
声明的枚举类默认使用final修饰的 并且默认为抽象类
例如:Seanson季节
enum Season{
SPRING,SUMMER,AUTUMN,WINTER;
/*这四个就是枚举类的实例
* SPRING 类型就是Season
*
* 枚举实例前默认添加修饰符 public static final
* */
}
-
创建枚举类使用的关键字为enum,其实创建枚举类型都是java.lang.Enum的子类。简单来说Season的父类是Enum —>父类是Object。声明的枚举类不能再继承与其他类。但是可以实现多个接口
-
.Java.lang.Enum是一个抽象类,枚举类型符合一个模式:
class Enum<E extends Enum>
E --> 自己自定义的枚举类型 也就是Season -
枚举类型的每一个值都映射到Enum的构造方法
protected Enum(String name, int ordinal)SRRING 在内部实现了 new Enum<Season>("SPRING", 0);
-
枚举类的所有实例都必须是枚举类型中的第一条语句,每个实例之间使用逗号隔开,最后一个实例使用分号结尾
-
如果想在自定义枚举类中使用构造方法的话,该构造方法必须私有化。因为枚举类已经提供了对应的实例。并且枚举类是抽象的,抽象类不能由外界直接实例化
-
enum和class 以及interface是平级的,编译之后都会生成对应的class文件
1.3 枚举的使用
interface EnumInterface{
String getInfo();
}
enum Season implements EnumInterface{
SPRING,SUMMER,AUTUMN,WINTER;
/*这四个就是枚举类的实例
* SPRING 类型就是Season
*
* 枚举实例前默认添加修饰符 public static final
* */
// 实现方法:
public String getInfo(){
return this.name() + "-" + this.ordinal();
}
}
public class EnumTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1. 想获得枚举类型Season的实例
Season spring = Season.SPRING;
switch(spring){
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
}
// 获得枚举类型实例的String的name值和对应的编号
String name = Season.SPRING.name();
System.out.println(name);
int num = Season.SPRING.ordinal();
System.out.println(num);
/**
* compareTo
* 比较之间的顺序
* A在B之前 -1
* A在B之后 1
* A和B在同一个位置就0
*/
Season s1 = Season.AUTUMN;
Season s2 = Season.SUMMER;
switch(s1.compareTo(s2)){
case 1:
System.out.println("s1在s2之后");
break;
case -1:
System.out.println("s1在s2之前");
break;
case 0:
System.out.println("s1和s2在同一位置");
break;
}
/**
* compareTo是用序号进行相减的
* 结果不一定是1或者-1
*/
// 获取枚举类型实例 调用接口中的方法
Season winter = Season.WINTER;
String info = winter.getInfo();
System.out.println(info);
}
}
枚举的构造
enum Week{
MON("星期一", 1),TUE("星期二", 2);
private String name;
private int index;
// 私有化构造方法 外界不能获取
private Week(String name, int index){
this.name = name;
this.index = index;
}
public String getName(){
return name;
}
public int getIndex(){
return index;
}
}
public class EnumTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Week week = Week.MON;
System.out.println(week.getName());
}
}