枚举类的使用

枚举

1.1 什么情况下使用枚举类

当一个类的对象是固定的并且个数是有限的

1.2 枚举类体验

声明枚举类的关键字是enum
声明的枚举类默认使用final修饰的 并且默认为抽象类

    例如:Seanson季节
    enum Season{
         SPRING,SUMMER,AUTUMN,WINTER;
         /*这四个就是枚举类的实例
          *   SPRING 类型就是Season
          *
          * 枚举实例前默认添加修饰符 public static final
           * */
    }
  1. 创建枚举类使用的关键字为enum,其实创建枚举类型都是java.lang.Enum的子类。简单来说Season的父类是Enum —>父类是Object。声明的枚举类不能再继承与其他类。但是可以实现多个接口

  2. .Java.lang.Enum是一个抽象类,枚举类型符合一个模式:
    class Enum
    E --> 自己自定义的枚举类型 也就是Season

  3. 枚举类型的每一个值都映射到Enum的构造方法
    protected Enum(String name, int ordinal)

      SRRING 
            在内部实现了
                new Enum("SPRING", 0);
    
  4. 枚举类的所有实例都必须是枚举类型中的第一条语句,每个实例之间使用逗号隔开,最后一个实例使用分号结尾

  5. 如果想在自定义枚举类中使用构造方法的话,该构造方法必须私有化。因为枚举类已经提供了对应的实例。并且枚举类是抽象的,抽象类不能由外界直接实例化

  6. 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());
}

}

你可能感兴趣的:(Java)