java枚举类详解

什么是枚举类

      枚举类,就如它的名字一样,这个类里面的属性就是用来枚举的。当某些属性是固定个数的,就可以使用枚举类。比如星期,性别,季节,月份等固定的常量。JAVA将线程的状态也定义成了枚举类(Thread.State)。如下所示:

public enum State {

        NEW,


        RUNNABLE,


        BLOCKED,


        WAITING,


        TIMED_WAITING,


        TERMINATED;
    }

可以看到,当定义一组不变的常量,就可以使用枚举类。

使用enum枚举类

使用说明

  • 使用enum定义的枚举类默认继承了java.lang.Enum类,因此不能再继承其他类
  • 枚举类的构造器只能使用private 权限修饰符,默认不写也是
  • 枚举类的所有实例必须在枚举类中显式列出(, 分隔; 结尾)。列出的实例系统会自动添加public static final 修饰
  • 枚举类对象的属性不应允许被改动, 所以应该使用private final 修饰
  • 枚举类默认重写了toString()方法,但是只返回枚举对象名,可以重写来进行更详细的描述。
  • 必须在枚举类的第一行声明枚举类对象
  • 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数
enum Season {
    SPRING("春天", "天街小雨润如酥"),
    SUMMER("夏天", "小荷才露尖尖角"),
    AUTUMN("秋天", "霜叶红于二月花"),
    WINTER("冬天", "雪后春光欲到梅");
    private final String name;
    private final String desc;

    Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    @Override
    public String toString() { 
        return name + ":" + desc;
    }
}

枚举类的主要方法

  • values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
  • toString():返回当前枚举类对象常量的名称
public class EnumDemo {
    public static void main(String[] args) {
        Season[] values = Season.values(); //获取枚举类的对象数组
        for (Season s : values) {
            System.out.println(s); // 遍历输出
        }
    }
}

枚举类可以实现接口

  • 和普通Java 类一样,枚举类可以实现一个或多个接口
  • 若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。
  • 若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法
public class EnumDemo {
    public static void main(String[] args) {
        Season[] values = Season.values();
        for (Season s : values) {
            s.show();
        }
    }
}

interface Info {
    void show();
}

enum Season implements Info {
	// 每个枚举实例通过匿名内部类的方式分别实现接口的方法
    SPRING("春天", "天街小雨润如酥") {
        @Override
        public void show() {
            System.out.println("SPRING");
        }
    },
    SUMMER("夏天", "小荷才露尖尖角") {
        @Override
        public void show() {
            System.out.println("SUMMER");
        }
    },
    AUTUMN("秋天", "霜叶红于二月花") {
        @Override
        public void show() {
            System.out.println("AUTUMN");
        }
    },
    WINTER("冬天", "雪后春光欲到梅") {
        @Override
        public void show() {
            System.out.println("WINTER");
        }
    };
    private final String name;
    private final String desc;

    Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    @Override
    public String toString() {
        return name + ":" + desc;
    }
}

结果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值