Java基础(3):枚举类

1 枚举类入门

  • 对于对象有限且固定的类,使用枚举类。
  • 使用enum关键字定义枚举类。(enum关键字和class、interface的作用相似)
  • 枚举类注意事项:
    • 枚举类默认继承java.lang.Enum类。
    • 非抽象枚举类默认使用final修饰,不能派生子类。
    • 枚举类的实例必须在枚举类的第一行显式列出。(枚举类的实例只能是枚举值)
package org.ywq.enumclass;

public enum SeasonEnum{
    //在第一行列出枚举实例
    SPRING,SUMMER,FALL,WINTER;
}

注意

  1. 枚举类的实例通过类名.实例名调用。
  2. switch的控制表达式可以是任何枚举类型,case表达式的值可以直接用枚举值的名字,不需要添加枚举类作为限定。
package org.ywq.enumclass;

public class EnumClassTest {
	public void judge(SeasonEnum s) {
		switch (s) {  
		case SPRING:
			System.out.println("春暖花开");
			break;
		case SUMMER:
			System.out.println("夏日炎炎");
			break;
		case FALL:
			System.out.println("秋高气爽");
			break;
		case WINTER:
			System.out.println("冬日飘雪");
			break;
		}
	}

	public static void main(String[] args) {
		for (SeasonEnum s : SeasonEnum.values()) {
			System.out.println(s);
		}
		new EnumClassTest().judge(SeasonEnum.SPRING);
	}
}

2 java.lang.Enum类常用方法

  Enum类的常用方法,可以由用户自己定义的枚举类使用。(继承)

Modifier and Type Method Description
String name() 返回此枚举实例的名称
public static <T extends Enum>T valueOf(Class enumType, String name) 返回枚举类中指定名称的枚举值

3 枚举类的成员变量和方法

  • 枚举类的成员变量建议都设为private final.
  • 枚举类的构造方法一般显式定义带参数,因为枚举值要调用对应的构造器来创建,所以列出的枚举值也必须传入参数。
  • 枚举类构造器使用private修饰,即不能新建枚举类对象。
    public enum Gender{
        //枚举值要调用对应的构造器来创建
        MALE("男"),FEMALE("女");  //等价于:public static final Gender MALE = new Gender("男");
                                 //       public static final Gender FEMALE = new Gender("女");
        private final String name;
        //构造器
        private Gender(String name){
            this.name=name;
        }
        public String getName(){
            return this.name;
        }
    }
    

4 枚举类实现接口

  枚举类可以和普通类一样实现接口,但这种实现使得每个枚举实例的接口实现方法都一样。若要为每个枚举值提供不同实现方式,参照匿名对象实现:

//接口
public interface GenderDesc{
    void info();
}
//枚举类实现接口
public enum Gender implements GenderDesc{
    MALE("男"){
        public void info(){
            System.out.println("这个枚举值代表男性");
        }
    },
    FEMALE("女"){
         public void info(){
            System.out.println("这个枚举值代表女性");
        }
    };
    private final String name;
    private Gender(String name){
        this.name=name;
    }
}

注意:此时的枚举值不是Gender枚举类的实例,而是Gender的匿名子类的实例。

5 抽象枚举类

  • 枚举类中有抽象方法时,系统自动为其添加abstract关键字,不能手动添加。
  • 枚举值中要重写枚举类的抽象方法。
package org.ywq.absenumclass;

public enum Operation {
	ADD {
		public double oper(double x, double y) {
			return x + y;
		}
	},
	SUB {
		public double oper(double x, double y) {
			return x - y;
		}
	},
	MUL {
		public double oper(double x, double y) {
			return x * y;
		}
	},
	DIV {
		public double oper(double x, double y) {
			return y == 0 ? y : x / y;
		}
	};
	// 抽象方法
	public abstract double oper(double x, double y);

	public static void main(String[] args) {
		System.out.println(Operation.ADD.oper(1.2, 2.1));
		System.out.println(Operation.SUB.oper(1.2, 2.1));
		System.out.println(Operation.MUL.oper(1.2, 2.1));
		System.out.println(Operation.DIV.oper(1.2, 2.1));
	}
}

猜你喜欢

转载自blog.csdn.net/new_delete_/article/details/84190466