JavaSE--枚举类

1、什么是枚举类、枚举类的使用场景

1、枚举类是一组有限常量的集合。
2、当类的对象是有限个、确定的,可以将这个类设定为枚举类
3、当需要定义一组常量时,使用枚举类。
4、可以用枚举类来表示状态。

2、如何定义枚举类

  1. java5以前的定义
public class Condition {
//描述枚举类
  private final String desc;
  
  //枚举类的构造器总是私有的,因为枚举类实例是常量
  //常量必须被赋值
  private Condition(String desc){
      this.desc = desc;
  }
  
  //定义枚举类常量
   public static final Condition fine = new Condition("fine");
   public static final Condition good = new Condition("good");
   public static final Condition bad = new Condition("bad");

   @Override
   public String toString() {
       return "Condition{" +
               "desc='" + desc + '\'' +
               '}';
   }
}

==============================
System.out.println(Condition.bad);

2、java5以后进行了优化,只需要用enum关键字,就可以将一个类声明为枚举类

public enum Condition {

    fine ("fine"),
    good("good"),
    bad ("bad");
    
   private final String desc;

   private Condition(String desc){
       this.desc = desc;
   }
   
    @Override
    public String toString() {
        return "Condition{" +
                "desc='" + desc + '\'' +
                '}';
    }
}

3、enum定义枚举类的细节

1、用enum关键字定义枚举常量时,枚举常量必须放在类的最前面定义

public enum Condition {
    fine ("fine"),
    good("good"),
    bad ("bad");
    }

2、定义枚举常量时,直接写枚举常量名,默认枚举常量修饰符为public static final
枚举常量类型为 枚举类;将描述枚举常量的变量值紧跟枚举常量后面,等价于向私有构造器传入。

public enum Condition {
    fine ("fine"),
    good("good"),
    bad ("bad");
    }

每一个枚举常量之间用 “ , ”隔开,最后用 “;”

3、每一个枚举类的构造器总是私有的,因为枚举类实例是常量,不需要被改变;
如果一个枚举类的构造器是public或者protected,会出现语法错误

4、每一个具体枚举类都有一个抽象父类:
public abstract class Enum<E extends Enum<E>>

5、枚举类可以直接使用 == 来判断两个枚举类是否相同

6、构造枚举类时的构造器调用链
父类Enum的构造器------->实现子类的构造器

PS: 父类Enum的构造器
Enum的构造器只有一个有参构造器

	  protected Enum(String name, int ordinal) {
       this.name = name;
       this.ordinal = ordinal;
   }

这个构造器中有两个参数,name、ordinal;
name是枚举常量名,ordinal是枚举常量声明时的位置

4、枚举类的方法

所有枚举类继承于抽象父类 java.lang.Enum,Enum中定义了如下方法
在这里插入图片描述
接下来重点讲几个方法:
1、String toString
Enum中的用于返回枚举常量名。

2、静态方法values
Enum中返回包含全部枚举变量的数组

Condition[] values = Condition.values();
System.out.println(Arrays.toString(values));
=========================================
输出枚举常量名:[fine, good, bad]

3、int ordinal
方法枚举常量在enum声明中的位置,位置从0开始计数

int ordinal = Condition.bad.ordinal();
System.out.println(ordinal);//输出 2

4、Static Enum valueOf

Condition condition = Condition.valueOf("bad");
Condition condition1 = Condition.valueOf(Condition.class, "bad");

传入枚举常量名或者指定枚举类型与枚举常量名,返回一个枚举常量。

5、int compareTo()

 public final int compareTo(E o) {
       Enum<?> other = (Enum<?>)o;
       Enum<E> self = this;
       if (self.getClass() != other.getClass() && // optimization
           self.getDeclaringClass() != other.getDeclaringClass())
           throw new ClassCastException();
       return self.ordinal - other.ordinal;//ordinal指声明中的位置
   }

用于比较传入的枚举常量与枚举常量的大小,比较的依据是在enum中声明的位置。
如果枚举常量出现在传入的常量之前,返回负数;相等,返回0;在传入常量后,返回正数;
返回值是两者位置之差,注意:上面说过,枚举类的位置从0开始

定义的位置:
fine,
good,
bad;
 @Test
    public void aVoid(){
        int i = Condition.bad.compareTo(Condition.fine);
        System.out.println(i);//输出 2
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值