【JavaSE】十二生肖带你走进枚举类(下)

简介: 文章目录1.枚举类引入2 自定义类实现枚举2.1 自定义类实现枚举的步骤与特点2.2 按照步骤实现自定义类3 enum关键字实现枚举3.1 enum枚举类实现步骤3.2 使用enum关键字解决需求3.3 使用enum枚举类的注意事项4 enum常用方法及基本使用4.1 toString() 与 name()4.2 oridinal()4.3 values() 与 valueOf()5 练习*

2️⃣ 使用 enum 关键字后,就 不能再继承其他类 了,因为隐式继承了 Enum类,而 Java是单继承机制! 但是,枚举类和普通类一样,可以实现接口,如下形式:

enum 类名 implents 接口1,接口2… …{ }

🍌 示例代码:

public class Main {
    public static void main(String[] args) {
        Animal.Bird.speak();
    }
}
/**
 * 接口
 */
interface Say{
    void speak();
}
/**
 * Animal类
 */
enum Animal implements Say{
    Bird;
    @Override
    public void speak() {
        System.out.println("动物叫~~~");
    }
}

运行结果:

动物叫~~~

3️⃣ 使用 enum 关键字后,类似上面所讲的自定义枚举类,即构造方法被私有化,同样无法创建对象。

4 enum常用方法及基本使用

🚗 enum常用方法一览表:

方法名 详细描述
valueOf() 传递枚举类型的Class对象和枚举常量名称给静态方法valueOf,会得到与参数匹配的枚举常量
toString() 得到当前枚举常量的名称。你可以通过重写该方法使得到的结果更易读
equals() 在枚举类型中可以直接使用 == 来比较两个枚举常量是否相等。Enum提供的该方法也是直接使用 == 来判断的。它的存在是为了在 Set 、 List 和 Map 中使用。equals() 是不可变的
hashCode() 与equals()保持一致,也是不可变的
getDeclaringClass() 得到枚举常量所属的枚举类型的Class对象。用于判断两个枚举常量是否属于同一枚举类型
name() 得到当前枚举常量的名称
ordinal() 得到当前枚举常量的次序,与数组索引类似,从0开始
comparaTo() 可以比较两个枚举常量的大小(按照声明的顺序排列)
clone() 枚举类型不能被Clone。为了防止子类实现克隆方法,Enum实现了一个仅抛出CloneNotSupportedException异常的不变Clone()方法

4.1 toString() 与 name()

toString() 方法 Enum类已经重写过了,返回当前对象名;

name() 方法返回当前对象名,子类不能重写;

🐦 示例代码及结果:



4.2 oridinal()

返回当前对象的序号,和声明顺序有关,索引默认从0开始。

🐦 示例代码及结果:



4.3 values() 与 valueOf()

values() 返回当前枚举类的所有常量(以枚举类数组的形式);

valueOf() 将字符串转成枚举对象,要求字符串必须为已有常量名,否则抛出异常。

🐦 示例代码及结果:

public class Main {
    public static void main(String[] args) {
        System.out.println("============== values =================");
        Animal[] animals = Animal.values();  // 接收常量
        for (Animal animal: animals) {
            System.out.print(animal + " ");  // 默认调用toString输出对象名
        }
        System.out.println("\n============== valueOf =================");
        Animal rabbit = Animal.valueOf("RABBIT");  // 在枚举类寻找对象名为RABBIT的对象,引用赋给mouse
        System.out.println(rabbit);  // RABBIT
    }
}
/**
 * Animal类
 */
enum Animal {
    // 在enum创建对象,并对外暴露
   RAT("子鼠"), OX("丑牛"), TIGER("寅虎"), RABBIT("卯兔"),
    DRAGON("辰龙"), SNAKE("巳蛇"), HORSE("午马"), SHEEP("未羊"),
    MONKEY("申猴"), ROOSTER("酉鸡"), DOG("戌狗"), PIG("亥猪");
    private String name;  // 十二生肖姓名
    // 构造器私有化
    private Animal(String name) {
        this.name = name;
    }
}

============== values =================

RAT OX TIGER RABBIT DRAGON SNAKE HORSE SHEEP MONKEY ROOSTER DOG PIG

============== valueOf =================

RABBIT


5 练习*

声明 Week枚举类,其中包含星期一到星期日的定义。请你完成枚举类的编写,并在测试类遍历输出信息,形式如下图:



public class Test {
    public static void main(String[] args) {
        Week[] days = Week.values();
        for (Week day :
                days) {
            System.out.println(day);
        }
    }
}
enum Week{
    MONDAY("星期一"),TUESDAY("星期二"),
    WEDNESDAY("星期三"),THURSDAY("星期四"),
    FRIDAY("星期五"),SATURDAY("星期六"),
    SUNDAY("星期日");
    private String desc;
    private Week(String desc){
        this.desc = desc;
    }
    @Override
    public String toString() {
        return this.desc;
    }
}


相关文章
|
5月前
|
Java 编译器
31. 【Java教程】枚举类
31. 【Java教程】枚举类
38 1
|
6月前
|
Java Spring
【JAVA学习之路 | 提高篇】(枚举类)及其实现
【JAVA学习之路 | 提高篇】(枚举类)及其实现
|
11月前
|
Java 编译器
一文带你轻松拿下Java中的抽象类
一文带你轻松拿下Java中的抽象类
64 0
|
安全 算法 Java
【JavaSE专栏19】谈谈泛型和枚举的那些事
【JavaSE专栏19】谈谈泛型和枚举的那些事
200 0
|
Java 容器
【JavaSE专栏37】Java常用类 Object 解析,万物皆对象
【JavaSE专栏37】Java常用类 Object 解析,万物皆对象
158 0
|
安全 Java
【JavaSE专栏44】Java常用类Calender解析,科学处理Java日期数据
【JavaSE专栏44】Java常用类Calender解析,科学处理Java日期数据
264 0
【JavaSE】Java基础语法(二十一):内部类
1. 内部类的基本使用 内部类概念 在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类 内部类定义格式
|
IDE Java 编译器
【JavaSE成神之路】一文搞定static关键字
哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是Java的static关键字。
111 0
Java小白翻身教程-如何引用外部类
Java小白翻身教程-如何引用外部类
【JavaSE】十二生肖带你走进枚举类(上)
文章目录 1.枚举类引入 2 自定义类实现枚举 2.1 自定义类实现枚举的步骤与特点 2.2 按照步骤实现自定义类 3 enum关键字实现枚举 3.1 enum枚举类实现步骤 3.2 使用enum关键字解决需求 3.3 使用enum枚举类的注意事项 4 enum常用方法及基本使用 4.1 toString() 与 name() 4.2 oridinal() 4.3 values() 与 valueOf() 5 练习*
【JavaSE】十二生肖带你走进枚举类(上)