枚举 enumertation

枚举


   1)枚举对应英文(enumeration,简写enum);

   2)牧举是组常量的集合;

   3)可以这样理解:校举属于一种特殊的类,里面只包含组有限的特定的对象。

枚举的二种实现方式


   1)自定义类实现枚举;

   2)使用enum关键字实现枚举。

自定义实现枚举


1、 不需要提供setXxx方法,因为枚举对象值通常为只读;

2、 对枚举对象/属性使用 final + static 共同修饰,实现底层优化;

3、 枚举对象名通常使用全部大写,常量的命名规范;

4、 枚举对象根据需要,也可以有多个属性。

应用案例:

// 自定义枚举的实现
class Season{
    private String name; // Season name
    private String description; // Season description

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    private Season(String name, String description){
        this.name = name;
        this.description = description;
    }
    
    // final和static 往往搭配使用,效率更高,不会导致类加载,底层编译器做了优化处理;
    public final static Season SPRING = new Season("spring", "warm");
    public final static Season SUMMER = new Season("summer", "hot");
    public final static Season AUTUMN = new Season("autumn", "cool");
    public final static Season WINTER = new Season("winter", "cold");
    
    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", description='" + description + '\'' +
                '}';
    }
}

小结:
   1)构造器私有化;

   2)本类内部创建一组对象;

   3)对外暴露对象(通过为对象添加public final static修饰符);

   4)可以提供get方法,但是不要提供set。

enum关键字实现枚举


enum关键字实现枚举注意事项:
   1)使用关键字 enum 替代 class;

   2)2.public static final Season SPRING = new Season(“spring”, “warm”)简化成,SPRING(“spring”, “warm”) ——— 即:常量名 (实参列表);

   3)如果有多个枚举对象时, 使用 “,” 号间隔,最后一个 “;” 结尾;

   4)枚举对象必须放在枚举类的行首。

public class Enumeration02 {
    public static void main(String[] args) {
        System.out.println(Season2.SPRING);
        System.out.println(Season2.AUTUMN);
    }
}

// enum关键字枚举的实现
enum Season2{


    // 1.使用关键字 enum 替代 class
    // 2.public static final Season SPRING = new Season("spring", "warm")直接使用
    // SPRING("spring", "warm") —————— 即:常量名(实参列表)
    // 3.如果有多个常量(对象), 使用 “,” 号间隔即可
    // 4.如果使用enum来实现枚举,要求将定义常量对象,写在前面
    // 5.如果我们使用的是无参构造器,创建常量对象,则可以省略()

    SPRING("spring", "warm"),
    SUMMER("summer", "hot"),
    AUTUMN("autumn", "cool"),
    WINTER("winter", "cold"),
    WHAT(); // 或者是 WHAT;
    private String name; // Season name
    private String description; // Season description


    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

	private Season2(){	// 无参构造器

    }

    private Season2(String name, String description){
        this.name = name;
        this.description = description;
    }

    // 如果使用了 enum 来实现枚举类


    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", description='" + description + '\'' +
                '}';
    }

}

运行结果:
在这里插入图片描述

Enum成员方法说明


说明: 使用关键字enum时,会隐式继承Enum类,这样我们就可以使用Enum类的相关方法。
在这里插入图片描述

enum方法一览表:

方法名详细描述
valueOf传递枚举类型的Class对象和枚举常量名称给静态方法valueOf,会得到与参数匹配的枚举常量。
toString得到当前枚举常量的名称;你可以通过重写这个方法来使得到的结果更易读。
hashCodeEnum实现了hashCode0)来和equals0保持一致; 它也是不可变的。
getDeclaringClass得到枚举常量所属枚举类型的Class对象;可以用它来判断两个枚举常量是否属于同一个枚举类型。
name得到当前枚举常量的名称;建议优先使用toString0
ordinale得到当前枚举常量的次序。
compareTo枚举类型实现了Comparable接口,这样可以比较两个枚举常量的大小(按照声明的顺序排列)。
clone枚举类型不能被Clone;为了防止子类实现克隆方法,Enum实现了一个仅抛出CloneNotSupportedException 异常的不变Clone() 。

enum常用方法:

   1)toString:返回的是当前对象名子类可以重写该方法,用于返回对象的属性信息;

   2)name:返回当前对象名 (常量名) ,子类中不能重写;

   3)ordinal:返回当前对象的位置号,默认从开始;

   4)values:返回当前枚举类中所有的常量;

   5)valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!

   6)compareTo:比较两个枚举常量,比较的就是位置号!

Enum使用细节


   1)使用enum关键字后,就不能再继承其它类了,因为enum会隐式继承Enum,而Java是单继承机制;

   2)枚举类和普通类一样,可以实现接口,如下形式。

enum 类名 implements 接口1, 接口2{}
  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值