10.枚举

1.背景及定义

枚举是在JDK1.5以后引入的。

主要用途是:

将一组常量组织起来,

在这之前表示一组常量通常使用定义常量的方式:

public static final int RED = 1;
public static final int GREEN = 2;
public static final int BLACK = 3;

但是常量举例有不好的地方,例如:可能碰巧有个数字1,但是他有可能误会为是RED,现在我们可以直接用枚举来进行组织,这样一来,就拥有了类型,枚举类型。而不是普通的整形1. 

public enum TestEnum {
        RED,BLACK,GREEN;
}

优点:将常量组织起来统一进行管理
场景:错误状态码,消息类型,颜色的划分,状态机等等....
本质:是 java.lang.Enum 的子类,也就是说,自己写的枚举类,就算没有显示的继承 Enum ,但是其默认继承了这个类。

2.使用

2.1 switch语句

public enum TestEnum {
    RED,BLACK,GREEN,WHITE;
    public static void main(String[] args) {
        TestEnum testEnum2 = TestEnum.BLACK;
        switch (testEnum2) {
            case RED:
                System.out.println("red");
                break;
            case BLACK:
                System.out.println("black");
                break;
            case WHITE:
                System.out.println("WHITE");
                break;
            case GREEN:
                System.out.println("black");
                break;
            default:
                break;
        }
    }
}

2.2 常用方法 

Enum 类的常用方法

方法名称 描述
values() 以数组形式返回枚举类型的所有成员
ordinal() 获取枚举成员的索引位置
valueOf() 将普通字符串转换为枚举实例
compareTo() 比较两个枚举成员在定义时的顺序
public enum TestEnum {
    RED, BLACK, GREEN, WHITE;

    public static void main(String[] args) {
        TestEnum[] testEnum2 = TestEnum.values();
        for (int i = 0; i < testEnum2.length; i++) {
            System.out.println(testEnum2[i] + " " + testEnum2[i].ordinal());
        }
        System.out.println("=========================");
        System.out.println(TestEnum.valueOf("GREEN"));
    }
}

public enum TestEnum {
    RED,BLACK,GREEN,WHITE;
    public static void main(String[] args) {
//拿到枚举实例BLACK
        TestEnum testEnum = TestEnum.BLACK;
//拿到枚举实例RED
        TestEnum testEnum21 = TestEnum.RED;
        System.out.println(testEnum.compareTo(testEnum21));
        System.out.println(BLACK.compareTo(RED));
        System.out.println(RED.compareTo(BLACK));
    }
}

在Java当中枚举实际上就是一个类。所以我们在定义枚举的时候,还可以这样定义和使用枚举: 

重要:枚举的构造方法默认是私有的

public enum TestEnum {
    RED("red",1),BLACK("black",2),WHITE("white",3),GREEN("green",4);
    private String name;
    private int key;
    /**
     * 1、当枚举对象有参数后,需要提供相应的构造函数
     * 2、枚举的构造函数默认是私有的 这个一定要记住
     * @param name
     * @param key
     */
    private TestEnum (String name,int key) {
        this.name = name;
        this.key = key;
    }
    public static TestEnum getEnumKey (int key) {
        for (TestEnum t: TestEnum.values()) {
            if(t.key == key) {
                return t;
            }
        }
        return null;
    }
    public static void main(String[] args) {
        System.out.println(getEnumKey(2));
    }
}

3.枚举优点缺点

优点:
1. 枚举常量更简单安全 。
2. 枚举具有内置方法 ,代码更优雅
缺点:
1. 不可继承,无法扩展

相关推荐

  1. <span style='color:red;'>10</span>.<span style='color:red;'>枚</span><span style='color:red;'>举</span>

    10.

    2024-04-09 07:20:05      39 阅读
  2. 16.Swift

    2024-04-09 07:20:05       52 阅读
  3. MyBatis(17)MyBatis 如何处理类型

    2024-04-09 07:20:05       24 阅读
  4. 折半(题目)

    2024-04-09 07:20:05       69 阅读
  5. Kotlin

    2024-04-09 07:20:05       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 07:20:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 07:20:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 07:20:05       82 阅读
  4. Python语言-面向对象

    2024-04-09 07:20:05       91 阅读

热门阅读

  1. uniapp 检查更新

    2024-04-09 07:20:05       37 阅读
  2. 新型基础设施建设(新基建)

    2024-04-09 07:20:05       32 阅读
  3. golang 使用 cipher、aes 实现 oauth2 验证

    2024-04-09 07:20:05       36 阅读
  4. MySQL视图及如何导入导出

    2024-04-09 07:20:05       35 阅读
  5. 【IP层的校验和与UDP的校验和】+【FPGA实现】

    2024-04-09 07:20:05       27 阅读
  6. Prime Ring Problem(UVA 524)

    2024-04-09 07:20:05       37 阅读
  7. 在mac环境下使用shell脚本实现tree命令

    2024-04-09 07:20:05       36 阅读
  8. 【远程桌面】Microsoft Remote Desktop 4 mac

    2024-04-09 07:20:05       37 阅读
  9. TypeScript尚硅谷学习

    2024-04-09 07:20:05       29 阅读
  10. Spring Boot整合MyBatis-Plus以及实现分页

    2024-04-09 07:20:05       35 阅读
  11. vue 双向绑定

    2024-04-09 07:20:05       36 阅读
  12. opencv+python文本绘制

    2024-04-09 07:20:05       30 阅读