一文看懂Java的枚举(中)

简介: 一文看懂Java的枚举(中)

2 常用用法

2.1 常量

在JDK1.5 之前,我们定义常量都是: public static fianl… 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

2.2 switch

JDK1.6之前的switch语句只支持int、char、enum类型,使用枚举,能让我们的代码可读性更强。

public class TestEnum {  
    public void changeColor() {  
        Color color = Color.RED; 
        System.out.println("原色:" + color);
        switch(color){  
        case RED:  
            color = Color.GREEN;  
            System.out.println("变色:" + color);  
            break;  
        case GREEN:  
            color = Color.BLUE;  
            System.out.println("变色:" + color);  
            break;  
        case BLUE:  
            color = Color.BLACK;  
            System.out.println("变色:" + color);  
            break;  
        case BLACK:  
            color = Color.PINK;  
            System.out.println("变色:" + color);  
            break;  
        case PINK:  
            color = Color.WHITE;  
            System.out.println("变色:" + color);  
            break;  
        case WHITE:  
            color = Color.RED;  
            System.out.println("变色:" + color);  
            break;  
        }  
    }  
    public static void main(String[] args){  
        TestEnum testEnum = new TestEnum();  
        testEnum.changeColor();  
    }  
}

2.3 实现接口

public interface Behaviour {  
        void print();  
        String getInfo();  
    }  
    public enum Color implements Behaviour {  
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
        // 成员变量  
        private String name;  
        private int index;  
        // 构造方法  
        private Color(String name, int index) {  
            this.name = name;  
            this.index = index;  
        }  
        // 接口方法  
        @Override  
        public String getInfo() {  
            return this.name;  
        }  
        // 接口方法  
        @Override  
        public void print() {  
            System.out.println(this.index + ":" + this.name);  
        }  
    }

枚举集合

  • EnumSet保证集合中的元素不重复
  • EnumMap中的 key是enum类型,而value则可以是任意类型
  • image.png
  • 三、综合实例

最简单的使用

最简单的枚举类

public enum Weekday {
    SUN,MON,TUS,WED,THU,FRI,SAT
}


如何使用它呢?

先来看看它有哪些方法:

image.png

这是Weekday可以调用的方法和参数。发现它有两个方法:values()和valueOf()。还有我们刚刚定义的七个变量

image.png

这些事枚举变量的方法。我们接下来会演示几个比较重要的

image.png

这段代码,我们演示了几个常用的方法和功能:


Weekday.valueOf() 方法:


它的作用是传来一个字符串,然后将它转变为对应的枚举变量。前提是你传的字符串和定义枚举变量的字符串一样,区分大小写。如果你传了一个不存在的字符串,那么会抛出异常。


Weekday.values()方法。


这个方法会返回包括所有枚举变量的数组。在该例中,返回的就是包含了七个星期的Weekday[]。可以方便的用来做循环。


枚举变量的toString()方法。


该方法直接返回枚举定义枚举变量的字符串,比如MON就返回【”MON”】。


枚举变量的.ordinal()方法。


默认情况下,枚举类会给所有的枚举变量一个默认的次序,该次序从0开始,类似于数组的下标。而.ordinal()方法就是获取这个次序(或者说下标)


枚举变量的compareTo()方法。


该方法用来比较两个枚举变量的”大小”,实际上比较的是两个枚举变量的次序,返回两个次序相减后的结果,如果为负数,就证明变量1”小于”变量2 (变量1.compareTo(变量2),返回【变量1.ordinal() - 变量2.ordinal()】)

image.png

这是compareTo的源码,会先判断是不是同一个枚举类的变量,然后再返回差值。

枚举类的name()方法。

它和toString()方法的返回值一样,事实上,这两个方法本来就是一样的:

image.png

这两个方法的默认实现是一样的,唯一的区别是,你可以重写toString方法。name变量就是枚举变量的字符串形式。


还有一些其他的方法我就暂时不介绍了,感兴趣的话可以自己去看看文档或者源码,都挺简单的。


要点:


使用的是enum关键字而不是class。

多个枚举变量直接用逗号隔开。

枚举变量最好大写,多个单词之间使用”_”隔开(比如:INT_SUM)。

定义完所有的变量后,以分号结束,如果只有枚举变量,而没有自定义变量,分号可以省略(例如上面的代码就忽略了分号)。

在其他类中使用enum变量的时候,只需要【类名.变量名】就可以了,和使用静态变量一样。

但是这种简单的使用显然不能体现出枚举的强大,我们来学习一下复杂的使用:

目录
相关文章
|
前端开发 JavaScript Java
【前端学java】Java中的接口和枚举概念(8)
【8月更文挑战第9天】Java中的接口和枚举概念(8)
149 4
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
434 60
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
158 24
|
安全 Java 程序员
Java语言枚举(Enum)的深入探索
Java语言枚举(Enum)的深入探索
221 0
|
安全 Java 索引
Java——反射&枚举
本文介绍了Java反射机制及其应用,包括获取Class对象、构造方法、成员变量和成员方法。反射允许在运行时动态操作类和对象,例如创建对象、调用方法和访问字段。文章详细解释了不同方法的使用方式及其注意事项,并展示了如何通过反射获取类的各种信息。此外,还介绍了枚举类型的特点和使用方法,包括枚举的构造方法及其在反射中的特殊处理。
237 9
Java——反射&枚举
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
209 5
|
安全 Java 开发者
Java 枚举(enum)详解
Java 中的枚举(`enum`)是一种特殊的数据类型,用于定义一组固定的常量,提升代码的类型安全性和可读性。枚举使用 `enum` 关键字定义,支持方法和构造函数,具有类型安全、单例、自动序列化等特点,并且可以遍历和用于 `switch` 语句中。实际应用包括状态机、指令集、类型标识等场景。枚举使代码更加清晰易维护。
1031 1
Java枚举使用的基本案例
这篇文章是关于Java枚举的基本使用,通过一个指令下发的代码案例,展示了如何定义枚举、使用枚举以及如何通过枚举实现指令的匹配和处理。
|
Java 开发者
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案。本文通过技术综述及示例代码,剖析两者在性能上的差异。if-else具有短路特性,但条件增多时JVM会优化提升性能;switch则利用跳转表机制,在处理大量固定选项时表现出色。通过实验对比可见,switch在重复case值处理上通常更快。尽管如此,选择时还需兼顾代码的可读性和维护性。理解这些细节有助于开发者编写出既高效又优雅的Java代码。
219 2
|
安全 Java
Java进阶之枚举
【7月更文挑战第11天】Java枚举是Java 5引入的特性,用于定义固定常量集合,如星期。枚举是继承自`java.lang.Enum`的特殊类,编译后成为final类,每个枚举值是静态final实例。定义枚举用`enum`关键字,如`public enum Weekday {MONDAY, TUESDAY, ...}`。枚举可包含方法和变量,能实现接口但不能继承其他类。例如,`Weekday`枚举可实现`Describe`接口,提供`describe()`方法。在实际应用中,枚举常用于表示如响应状态等固定选项,便于类型安全和代码阅读。
126 8