美文网首页
Java枚举基础

Java枚举基础

作者: Tinyspot | 来源:发表于2022-07-20 10:56 被阅读0次

1. 枚举

枚举是一个引用类型
枚举是一个规定了取值范围的数据类型

1.1 示例

定义枚举使用 enum 关键字

  1. 枚举中必须包含常量,也可以包含属性、方法、私有构造方法
  2. 枚举常量必须放在前面,多个常量之前使用逗号隔开,最后的分号可写可不写
public enum SeasonEnum {
    SPRING("spring", "春天"),
    SUMMER,
    AUTUMN,
    WINTER;

    private String code;
    private String name;

    // 构造方法是 private
    SeasonEnum() {
    }
    SeasonEnum(String code, String name) {
        this.code = code;
        this.name = name;
    }
}

枚举成员默认是final、public、static (可使用 SeasonEnum.SPRING 方式调用枚举成员)
每一个枚举类型成员都可以看作是枚举类的实例 (SeasonEnum.SPRING的类型也是SeasonEnum)

反编译看看 javap -p SeasonEnum.class

public final class SeasonEnum extends java.lang.Enum {
  public static final SeasonEnum SPRING;
  public static final SeasonEnum SUMMER;
  public static final SeasonEnum AUTUMN;
  public static final SeasonEnum WINTER;
  // 编译器添加的 values() 和 valueOf(String)
  public static SeasonEnum[] values();
  public static SeasonEnum valueOf(java.lang.String);
  static {};
}
  1. 枚举是 final 类型,无法被继承
  2. 所有用 enum 修饰的类继承自 Enum,由于 Java 的单继承,enum 类不能再继承其他类,但可以实现多接口

1.2 枚举与switch

public static void main(String[] args) {
    // SeasonEnum.SPRING 看上去像是一个类,这里很容易混淆,实际是一个对象
    SeasonEnum seasonEnum = SeasonEnum.SPRING;
    switch (seasonEnum) {
        case SPRING:
            break;
        case AUTUMN:
            break;
        case SUMMER:
            break;
        case WINTER:
            break;
        default:
            System.out.println();
    }
}

1.3 枚举实现接口

// 枚举类里不写属性,通过接口里的默认方法来访问mei ju
public enum SeasonEnum {
    SPRING("spring", "春天"),
    SUMMER,
    AUTUMN,
    WINTER;
    
    SeasonEnum() {
    }
    SeasonEnum(String code, String name) {
    }
}

2. 枚举的本质

  1. 枚举是一个 final 类,并继承 Enum 抽象类
  2. 枚举中常量是当前类型的静态常量
public abstract class Enum<E extends Enum<E>>
        implements Comparable<E>, Serializable {
    // Returns the name of this enum constant,
    public final String name() {
        return name;
    }
}

3. 数据结构

3.1 EnumSet

  • 枚举类型专用 Set 集合,EnumSet 中所有元素都必须是枚举类型
  • RegularEnumSet < 64-bit (long)
  • JumboEnumSet > 64-bit (long[])
EnumSet.png

3.2 EnumMap

  • EnumMap作为枚举的专属的集合,其 Key 为Enum类型
  • 类似于 HashMap
image.png

References

相关文章

  • 【Java基础】- 枚举

    枚举应用场景 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便 枚举与静态类 枚举类更加直观...

  • Java基础-枚举

    一、枚举类型 枚举类的常用方法 name(); 返回enum实例声明时的名字。 ordinal(); 返回一个...

  • Java枚举基础

    1. 枚举 枚举是一个引用类型枚举是一个规定了取值范围的数据类型 1.1 示例 定义枚举使用 enum 关键字 枚...

  • java基础

    JAVA基础 基本类型 enum 枚举Size { SMALL , MEDIUM , LARGE , EXTRA ...

  • 枚举

    枚举 [TOC] java.lang.Enum 类 如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型...

  • 学习路线

    Java Se基础 Java基础语法、数组、类与对象、继承与多态、异常、范型、集合、流与文件、反射、枚举、自动装箱...

  • java基础系列之枚举<三>

    在java基础系列之枚举<二>中进一步将枚举分类/分组实现枚举的枚举,则需要将其代码进一步修改,以达到如下要求:在...

  • Java基础类型

    Java基础类型 Java除了8个基础类型和枚举类型外,其他的都是引用类型 整型(默认值0) 浮点型(默认值0.0...

  • Java基础系列-Enum深入解析

    原创文章,转载请标注出处:《Java基础系列-Enum深入解析》 一、概述 枚举就是一个语法糖效果。 定义一个枚举...

  • ##Java学习笔记之基础类库笔记

    Java学习笔记之基础类库笔记 Object 所有类,数组,枚举类的父类 Objects(Java7新增) 工具类...

网友评论

      本文标题:Java枚举基础

      本文链接:https://www.haomeiwen.com/subject/xmoboltx.html