Java中enum枚举类型的基本特性详解

 更新时间:2023年11月08日 08:43:28   作者:一只小熊猫呀  
这篇文章主要介绍了Java中enum枚举类型的基本特性详解,enum关键字用于创建一个新类型,其中包含一组数量有限的命名变量,并视这些变量为常规程序组件,实践表明这是一种非常有用的类型,需要的朋友可以参考下

enum枚举类型的基本特性

enum关键字用于创建一个新类型,其中包含一组数量有限的命名变量,并视这些变量为常规程序组件。实践表明这是一种非常有用的类型

你可以调用枚举类型中的 values() 方法来遍历枚举常量列表。values() 方法生成一个由枚举常量组成的数组,其中常量的顺序和常量声明的顺序保持一致,这样你就可以方便地(比如通过for-in循环)使用结果数组了。

当创建枚举类型时,编译器会为你生成一个辅助类,这个类自动继承自java.lang.Enum。java.lang.Enum提供了下例所示的一些功能:

EnumClass.java

enum Shrubbery {GROUND, CRAWLING, HANGING}
public class EnumClass {
    public static void main(String[] args) {
        for (Shrubbery s : Shrubbery.values()) {
            System.out.println(s + " ordinal: " + s.ordinal());
            System.out.print(s.compareTo(Shrubbery.CRAWLING) + " ");
            System.out.print(s.equals(Shrubbery.CRAWLING) + " ");
            System.out.println(s == Shrubbery.CRAWLING);
            System.out.println(s.getDeclaringClass());
            System.out.println(s.name());
            System.out.println("********************");
        }
        // Produce an enum value from a String name:
        for (String s : "HANGING CRAWLING GROUND".split(" ")) {
            Shrubbery shrub = Enum.valueOf(Shrubbery.class, s);
            System.out.println(shrub);
        }
    }
}

运行结果:

ordinal() 方法返回一个从0开始的int值,代表每个枚举实例的声明顺序。你可以放心地使用 == 来比较枚举实例( equals() 和 hashCode() 方法会由编译器自动为你生成)。Enum 类实现了 Comparable 接口(因此可比较), 所以自动包含了 compareTo() 方法,另外它还实现了 Serializable 接口(因此可序列化)。

如果调用枚举实例的 getDeclaringClass()方法,则会得到该枚举实例所属的外部包装类。

name() 方法返回枚举实例被声明的名称,使用 toString() 同样也可以返回该名称。 value0f() 方法是 Enum 类中的静态方法,它根据传入的 String, 返回名称与该 String 匹配的枚举实例。如果匹配的实例不存在,则抛出异常。

静态导入枚举类型

下面是基础卷第 6 章中 Burrito.java 类的一个变体:

SpicinessEnum.java

public enum SpicinessEnum {
    NOT, MILD, MEDIUM, HOT, FLAMING
}

Burrito2.java

public class Burrito2 {
    SpicinessEnum degree;

    public Burrito2(SpicinessEnum degree) {
        this.degree = degree;
    }

    @Override
    public String toString() {
        return "Burrito is " + degree;
    }

    public static void main(String[] args) {
        System.out.println(new Burrito2(NOT));
        System.out.println(new Burrito2(MEDIUM));
        System.out.println(new Burrito2(HOT));
    }
}

运行结果:

Burrito is NOT
Burrito is MEDIUM
Burrito is HOT

static import 将所有的枚举实例标识符都引入了本地命名空间,因此它们不需要显式地使用枚举类型来限定。相较于显式地用枚举类型来限定枚举实例,哪种方式更好呢?这很大程度上要视代码的复杂程度而定。编译器肯定会保障类型的正确性,所以你唯一要关心的就是代码的可读性如何。一般来说不会有大问题,但还是要根据具体情况评估。

注意,如果枚举定义在同一个文件中,或者定义在默认包中,则无法使用该方式(显然在Sun公司的内部,对于是否允许这种情况有过一些争论)。

到此这篇关于Java中enum枚举类型的基本特性详解的文章就介绍到这了,更多相关enum枚举类型的基本特性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java方法签名为何不包含返回值类型

    Java方法签名为何不包含返回值类型

    这篇文章主要介绍了Java方法签名为何不包含返回值类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 项目总结之HttpURLConnection的disconnect的问题

    项目总结之HttpURLConnection的disconnect的问题

    这篇文章主要介绍了项目总结之HttpURLConnection的disconnect的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • java对象类型转换和多态性(实例讲解)

    java对象类型转换和多态性(实例讲解)

    下面小编就为大家带来一篇java对象类型转换和多态性(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Spring注解驱动之ApplicationListener用法解读

    Spring注解驱动之ApplicationListener用法解读

    这篇文章主要介绍了Spring注解驱动之ApplicationListener用法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • java面向对象设计原则之里氏替换原则示例详解

    java面向对象设计原则之里氏替换原则示例详解

    这篇文章主要为大家介绍了java面向对象设计原则之里氏替换原则示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-10-10
  • Java中的六种经典比较排序算法

    Java中的六种经典比较排序算法

    排序算法是程序开发和计算机科学中常见的算法之一,排序算法是算法分析的重要内容之一,因为排序算法的效率影响着程序的性能和稳定性,本文的目的是介绍常见的排序算法,并且通过代码示例演示它们的实现过程,需要的朋友可以参考下
    2023-06-06
  • Java使用kafka发送和生产消息的示例

    Java使用kafka发送和生产消息的示例

    本篇文章主要介绍了Java使用kafka发送和生产消息的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • java使用FuncGPT慧函数对Mybatis进行一对一查询映射处理

    java使用FuncGPT慧函数对Mybatis进行一对一查询映射处理

    这篇文章主要介绍了java使用FuncGPT慧函数对Mybatis进行一对一查询映射处理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • springboot Junit 执行顺序详解

    springboot Junit 执行顺序详解

    这篇文章主要介绍了springboot Junit 执行顺序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 详解Java多线程与并发

    详解Java多线程与并发

    多线程是一个进程在执行过程中产生多个更小的程序单元,这些更小的单元称为线程,这些线程可以同时存在,同时运行,一个进程可能包含多个同时执行的线程。多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。
    2021-06-06

最新评论