Java学习记录 枚举

枚举

Class Enum<E extends Enum <E> >
java.lang.Object
java.lang.Enum <E>

枚举是一种特殊的数据类型,也是常量的集合

优点:

  • 类型安全
  • 紧凑有效的数据定义
  • 可以和程序其他部分完美交交互
  • 运行效率高

枚举中的构造方法

在枚举类型中添加构造方法前提该构造方法必须为private权限修饰符

public enum Constants{
    
    //Constants枚举名称
    Constants_A,
    Constants_B;
    private String name;
    private Constants(String name){
    
    
        name.this = name;
    }
}

常量设置

当定义枚举类型时,每个枚举类型的成员都可以看做实例,类型默认修饰为 finalpublicstatic ,当使用时直接调用对应的名称即可

public enum Level{
    
    //Constants枚举名称
	LOW(30) , MEDIUM(15) , HIGH(7) , URGENT(1);
	    
	private int levelValue;
	private Level(int levelValue) {
    
    
		this.levelValue = levelValue;
	}
	public int getLevelValue() {
    
    
		return levelValue;
	}
}

接口实现

枚举已经继承了Java.lang.Enum类,Java 不支持多继承,所以枚举对象不能再继承其他类

public interface Lshow(){
    
    
    void show();
}
public enum Level implements Lshow(){
    
    
    
    LOW(100){
    
    
        public void show(){
    
    
            ···
        }
    },
    //注意:每个常量要有逗号分隔
    URGENT(1){
    
    
        public void show(){
    
    
            ···
        }
    }
    
    private int levelValue;
    private Level(int levelValue) {
    
    
    	this.levelValue = levelValue;
    }
    public int getLevelValue() {
    
    
    	return levelValue;
    }
}

方法

返回 方法 说明
int compareTo(<E> o) 获取 两个枚举常量比较的顺序
int ordinal()  获取 枚举常量的索引位置
Class<?> getDeclaringClass() 获取 枚举常量的类型对应的Class对象
String name() 获取 枚举常量的名称
static<T extends Enum<T>> T static valueOf(Class<T> enumType , String name) 获取 指定枚举类型的枚举常量

注意:

  • 枚举属性不要试图修改(一般定义的都是常量)
  • 枚举类默认继承 java.lang.Enum类
  • 枚举类不能有子类,因枚举类默认被final修饰
  • 只能有private构造方法 switch中使用枚举时,直接使用常量名,不用携带类名
  • 不能定义name属性,因自带name属性

代码实例

package kkb;

/**
 * @Author: 柏竹
 * @Description: 一个简洁主义...
 * @Date_Created_in: 2021-03-02 12:16
 * @Modified_By:
 * @Project: 接口与枚举使用比较
 */

class Demo {
    
    
    enum ELevel {
    
    
        /**
         * LOW : 最大 ; URGENT : 最小
         */
        LOW(100), URGENT(1);
        
        private int value;
        ELevel(int value){
    
    
            this.value = value;
        }
        public int getValue() {
    
    
            return value;
        }
    }
    
    interface LLevel {
    
    
        final int LOW = 100;
        final int URGENT = 1;
    }
    
    /**接口使用*/
    public void showL(int l){
    
    
        switch (l){
    
    
            case LLevel.URGENT :
                System.out.println("URGENT");
                break;
            case LLevel.LOW :
                System.out.println("LOW");
                break;
            default:
                System.out.println("错误");
        }
    }
    
    /**枚举使用*/
    public void showE(ELevel e){
    
    
        switch (e){
    
    
            case URGENT:
                System.out.println("URGENT");
                break;
            case LOW:
                System.out.println("LOW");
                break;
            default:
                System.out.println("错误");
        }
    }
    
    public static void main(String[] args) {
    
    
        Demo d = new Demo();
        d.showL(LLevel.URGENT);
        d.showE(ELevel.LOW);
        
         System.out.println("ELevel.LOW.name() : " + ELevel.LOW.name());
        System.out.println("ELevel.URGENT.ordinal() : " + ELevel.URGENT.ordinal());
        System.out.println("Enum.valueOf(ELevel.class  , \"URGENT\") : " + 	Enum.valueOf(ELevel.class , "URGENT"));
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45963193/article/details/113828654