枚举类

枚举类的使用

类的对象只有有限个, 确定的. 例如:

  • 星期: 一, 二, 三, 四, 五, 六, 日
  • 性别: 男, 女

当需要定义一组常量时, 强烈建议使用枚举类

如果枚举类中只有一个常量, 则可以作为单例模式的一种实现方式

定义枚举类

自定义枚举类

在Java5.0之前, 需要自定义枚举类

public class Season {
    //    提供枚举类的私有属性
    private final String seasonName;
    private final String seasonDesc;

    //    私有化构造器
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    //    提供静态的枚举类对象
    public static final Season SPRING = new Season("春", "冷");
    public static final Season SUMMER = new Season("夏", "热");
    public static final Season AUTUMN = new Season("秋", "爽");
    public static final Season WINTER = new Season("冬", "冷");
}

enum定义枚举类

在Java5.0之后, 提供了enum关键字. 使用enum关键字定义枚举类时, 默认继承Enum类.

enum Period {

    //    枚举类中需要首先声明定义的常量(类中可选项)
    //    常量之间用逗号隔开, 最后一个使用分号
    SPRING("春", "冷"),
    SUMMER("夏", "热"),
    AUTUMN("秋", "爽"),
    WINTER("冬", "冷");

    private final String seasonName;
    private final String seasonDesc;

    private Period(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
}

枚举类实现接口

可以在枚举类中实现接口方法, 达到统一一致的目的

也可以在枚举类对象中分别实现接口方法, 达到个性化定制的目的

interface Info {
    void publicShow();

    void personShow();
}


//使用enum关键字定义枚举类, 默认继承Enum类
enum Period implements Info {

    //    枚举类中需要首先声明定义的常量(类中可选项)
    //    常量之间用逗号隔开, 最后一个使用分号
    SPRING("春", "冷") {
        @Override
        public void personShow() {
            System.out.println("春天在哪里");
        }
    },
    SUMMER("夏", "热") {
        @Override
        public void personShow() {
            System.out.println("宁夏");
        }
    },
    AUTUMN("秋", "爽") {
        @Override
        public void personShow() {
            System.out.println("秋天不回来");
        }
    },
    WINTER("冬", "冷") {
        @Override
        public void personShow() {
            System.out.println("大约在冬季");
        }
    };

    private final String seasonName;
    private final String seasonDesc;

    private Period(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    @Override
    public void publicShow() {
        System.out.println("这是一个万物复苏的季节");
    }
}

注解

注解, 即元数据(Metadata)


   转载规则


《》 熊水斌 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
String类字符串常量池存放在方法区中. String类追根溯源最后都会变成对字符串常量池中字符串的引用. String类是不可变的(final). 只有当两个数据均处于字符串常量池中时, 使用+连接操作得到的结果才位于字符串常量池, 否
2022-11-11
下一篇 
反射反射是动态语言的关键, 允许程序在执行期间获取任何类的内部信息, 并直接操作任意对象的内部属性和方法 加载完某个类后, 在堆内存的方法区中产生了一个Class类型的对象—每个类对应一个且只有唯一一个Class对象. 这个对象包含类的完整
2022-11-11
  目录