Java -- 枚举

温馨提示 :所有自定义的枚举类都默认继承 java.lang.Enum 类,本节内容结合 java.lang.Enum 类进行讲解,切勿混淆

  • 1、定义一个枚举类,枚举的实例定义必须是大写
    在这里插入图片描述

  • 2、枚举类不可以 new 实例对象,因为自定义的枚举,都默认继承 Enum 类,且 Enum 类是抽象类,所以不可以产生实例

Enum 类
Enum类
举个例子:
在这里插入图片描述

  • 3、switch 支持枚举类型
    在这里插入图片描述
    执行结果
    在这里插入图片描述

  • 4、Enum 类中的 ordinal 属性及相关方法
    在这里插入图片描述
    在这里插入图片描述
    举个例子:
    在这里插入图片描述

  • 5、Enum 类中与 name 有关的方法
    name() 方法
    在这里插入图片描述
    toString() 方法
    在这里插入图片描述
    valueOf() 方法
    在这里插入图片描述
    举个例子:
    在这里插入图片描述

  • 6、Enum 类中的跟比较有关的方法
    equals() 方法
    在这里插入图片描述
    compareTo() 方法
    在这里插入图片描述
    举个例子:
    在这里插入图片描述

  • 7、Enum 类中的其他方法
    getDeclaringClass() 方法
    在这里插入图片描述
    举个例子:
    在这里插入图片描述

  • 8、valus() 方法
    它的作用是 把枚举的属性,都变成一个数组;此方法在源码中并不存在,是编译器自己生成的静态方法
    举个例子:
    在这里插入图片描述

  • 9、在 IDEA 创建一个枚举类
    在这里插入图片描述
    **注意:**1、所有枚举类的构造函数必须是私有的,默认为私有的
    在这里插入图片描述
    2、当给构造函数添加参数的时候,属性会报错,因为 RED、GREEN 等就是实例,必须给它们加参数
    在这里插入图片描述
    在这里插入图片描述

  • 10、枚举与反射
    在这里插入图片描述
    在这里插入图片描述
    在上面,明明刚创建了含有两个参数的私有构造函数,这里却报错,为什么呢?这里有一个面试题:
    普通类把构造函数私有化,虽然外部无法直接 new 对象,但依然可以通过反射访问该类私有构造函数生成对象。但是枚举的构造函数只能是私有的,得到这个构造函数之后,却不能通过 newInstance() 得到实例?

我们来打印所有的构造函数,看有没有两个参数的构造函数
在这里插入图片描述

发现有四参数构造函数,那我们就用反射访问一下四个参数的构造函数函数试试
在这里插入图片描述

结果是枚举通过反射根本 newInstance() 不出实例,可以看出用枚举去实现单例模式很安全

Constructor 中的 newInstance() 方法源码
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xyxy66/article/details/84381269
今日推荐