枚举类enum知识梳理

文章讲述了Java中自定义枚举类的实现方式,包括不需要setter、使用finalstatic修饰属性、命名规范等。同时,介绍了enum的特性,如自动继承Enum类、编译器生成的方法(valueOf()和values()),以及如何定义枚举抽象方法。此外,还提到了通过Class对象获取枚举实例的方法。
摘要由CSDN通过智能技术生成

自定义类实现枚举时

1.不需要setXXX方法,因为枚举对象通常只读

2.枚举属性用final static共同修饰,实现底层优化

3.枚举对象名全部大写

4.枚举对象可以有多个属性

class Season {
    private String name;//名字
    private String description;//描述
    public String getName () {
        return name;
    }
    public String getDescription () {
        return description;
    }
    private String Season (String name, String description) {
        this.name = name;
        this.description = description;
    }
    public final static Season SPRING = new Season ("春天","温暖");
    public final static Season SUMMER = new Season ("夏天","炎热");
}

 当我们使用enum枚举类时,上面的代码就可以简化很多

enum Season {
    SPRING("春天","温暖"),SUMMER("夏天","炎热");
    private String name;
    private String description;
    private Season (String name, String description){
        this.name = name;
        this.description = description;
    }
}
public class Test{
    public static void main (String [] args) {
        Season ss = Season.SPRING;
    }
}

enum使用注意事项:

1.每一个枚举类都会默认继承Enum类,并且是一个final的类。即final class Season extends Enum

2.在生成枚举类是,编译器会给我们生成两个方法,valueOf()和values()

3.如果使用的是无参构造器,那么()可以省略,即SPRING,SUMMER;

4.有多个枚举对象时,使用 , 间隔,最后一个 ; 结尾

5.枚举对象必须放在枚举类的第一行

Enum抽象类常见方法

返回类型    方法名称 方法说明
intcompareTo(E other)枚举类实现了Comparable接口,比较此枚举与指定对象的顺序,如果枚举常量出现在other之前,则返回一个负值,如果==,返回0,否则返回正值。枚举顺序 - other顺序
booleanequals(Object other)当指定对象等于此枚举常量时,返回 true。底层是直接用”==“来实现的
ClassgetDeclaringClass() 返回与此枚举常量的枚举类型相对应的 Class 对象
Stringname()返回此枚举常量的名称
intordinal() 返回枚举常量的序数(它在枚举声明中的位置,初始序数为0)
StringtoString()返回枚举常量的名称,底层调用name(),所以一般重写,更常用
 Tstatic valueOf(Class enumType, String name)返回带指定名称的指定枚举类型的枚举常量

以上是Enum抽象类的一些基本方法

而编译器为我们生成的values()和valueOf(String name)方法是枚举类特有的

valesOf()

编译器生成的valueOf(String name)方法需传递一个name参数,而Enum自带的静态方法valueOf()则需要传递两个参数,编译器生成的valueOf方法最终还是调用了Enum类的valueOf方法。

Season ss = Season.valueOf("SPRING");
System.out.println("ss=" + ss);//  ss=SPRING

values()

values()就是获取枚举类中的所有变量,并作为数组返回

//注意,当枚举实例向上转型为Enum类型时,values()方法失效

Season [] seasons = Season.values();
System.out.println(Arrays.toString(seasons));// [SPRING,SUMMER]

由于Class对象的存在,即使不使用values()方法,也可以获取到所有枚举实例变量

返回类型方法名称方法说明
T[]getEnumConstants()返回该枚举类型的所有元素,如果Class对象不是枚举类型,则返回null。
booleanisEnum()当且仅当该类声明为源代码中的枚举时返回 true
Season [] seasons = Season.values();//正常使用
Enum s = Season.SPRING;//向上转型
Class clazz = s.getDeclaringClass();
if(clazz.isEnum()){
    Season [] seasons2 = (Season [])clazz.getEnumConstans();
    System.out.println("seasons2:"+Arrays.toString(seasons2));
}
//输出 season2:[SPRING,SUMMER]

enum类中定义抽象方法

enum Week {
    MONDAY("星期一"){
        @Override
        void info() {
            return("哈哈周一");
        }
    },TUESDAY("星期2"){
        @Override
        void info() {
            return("哈哈周二");
        }
    };
    String name;

    Week(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name ;
    }
    abstract void info();
}
public class test{
    pulic static void main (String [] args) {    
        System.out.println(Week.MONDAY.info());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值