浅学枚举类

早期

早期代码中,直接使用简单的静态常量来表示枚举,例如下面的代码:

public static final int SEASON_SPRING = 1;
public static final int SEASON_SUMMER = 2;
public static final int SEASON_FALL = 3;
public static final int SEASON_WINTER = 4	;

缺点

  • 不安全,可以使用季节常量计算进行加减运算
  • 没有命名空间,使用季节时,必须在SPRINF加上SEASON前缀,不然容易与其他类的静态常量混淆
  • 意义不明确,输出SEASON_SPRING时得到的却是1,不知其意

枚举类

Java5时新增了enum关键字与class,interface关键字的地位相同,枚举类是一个特殊的类,

它一样可以拥有自己的成员变量,方法,可以实现一个或者多个接口,也可以定义自己的构造器。

枚举类与普通类的区别

  • 枚举类可以实现一个或者多个接口,使用enum定义的枚举类默认继承java.lang.Enum类,而不是默认

  • 继承Objec类。其中,java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口

  • 使用enum定义的非抽象枚举类类默认被final修饰,因此不能派生出子类。

  • 枚举构造器默认被private修饰,也只能被private修饰

  • 枚举类的所有实例必须在枚举类的第一行列出,否则这个枚举不能产生实例,列出实例时,系统会自动添加public static final 修饰。

定义一个枚举类
public enum SeasonEnum {
    SPRING,
    SUMMER,
    FALL,
    WINTER
}

枚举类测试

    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;
        }
    }
    @Test
    public void testEnum(){
        //values()枚举类默认方法,返回该枚举类所有实例
        for (SeasonEnum e: SeasonEnum.values()){
            //打印 枚举实例.toSting() :"SPRING","SUMMER","FALL","WINTER"
            System.out.println(e);
        }

        this.judge(SeasonEnum.SUMMER);//"夏天"
    }

java,lang.Enum的方法

  • intcompareTo(E o),指定枚举对象比较顺序,必须是同一个枚举类,如果枚举对象位于指定枚举对象之后,则返回正整数,如果该枚举对象位于指定枚举对象之前,则返回负数,否则返回0
  • String name(): 返回枚举类实例的名称,优先考虑toString(),可读性比较高
  • int irdinal(): 返回枚举值在枚举类中的索引值
  • String toString(): 返回枚举常量名称,与namw方法相似,但toString()方法更加常用
  • public static <T extends Enum> T valueOf(Class enumType,String),这一个静态方法,返回指定枚举类中指定名称的枚举值,name必须是枚举类的值,不允许是额外的空白字符串。
public enum Gender {
    MALE,
    FEMALE;
    public String name;//成员变量
}

测试类

    @Test
    public void test234(){
        Gender female = Enum.valueOf(Gender.class, "FEMALE");
        System.out.println(female);//"FEMALE"
        System.out.println(female.name);//null
    }

带参构造器枚举类

上面例子中枚举类的成员变量值不应该可以赋值,定义为不允许修改

public enum Gender {
    //此处的枚举值通过调用对应的构造器进行赋值
    MALE("男"),
    FEMALE("女");
    public String name;//成员变量

    private Gender(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

测试

    @Test
    public void test2341(){
        Gender female = Gender.FEMALE;
        System.out.println(female);//"FEMALE"
        System.out.println(female.name);//"女"
    }

包含抽象方法枚举类



感谢观看,每天进步一点点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

关于我成为程序员这档事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值