枚举 -- java学习笔记

枚举类 enum

本文章是通过学习B站视频韩顺平30天学java写的笔记

2022/2/20

?在这里插入图片描述

引入

当有多个固定的对象需要定义时, 如果每一个对象都要新建, 例如对于季节类, 需要春夏秋冬四个对象, 而按照之前所学内容, 要用户来创建对象, 那么四个季节就不固定. 季节只有四个, 用户定义没限制. 枚举类型是把具体的对象一个一个列举出来的类,因此季节可用枚举类来设计季节类

理解

枚举是一组常量的集合. 可以理解为: 枚举属于一种特殊的类, 里面只包含一组有限的特定的对象

自定义枚举流程

  1. 使用关键字enum 替代 class
  2. 定义常量, 例如: 本质是public static final Season SPRING = new Season("Spring", "warm");可以直接用SPRING("Spring", "warm") 替代. 解读: 常量名( 实参列表...)
  3. 如果有多个常量, 使用 , 间隔即可. 例如SPRING("Spring", "warm"), SUMMER("Summer", "hot");
  4. ???使用enum来实现枚举, 要求将定义的常量写在最前面

enum关键字实现枚举注意事项

  1. 当我们使用enum关键字来开发一个枚举类时, 默认会继承Enum类, 这里使用javap工具来进行反编译验证
    在这里插入图片描述
Compiled from "Enumeration01.java" final class com.hspedu.enum_.Season2 extends java.lang.Enum<com.hspedu.enum_.Season2> {
	public static final com.hspedu.enum_.Season2 SPRING;
	public static final com.hspedu.enum_.Season2 SUMMER; 
	public static final com.hspedu.enum_.Season2 AUTUMN; 
	public static final com.hspedu.enum_.Season2 WINTER; 
	public static com.hspedu.enum_.Season2[] values(); 
	public static com.hspedu.enum_.Season2valueOf(java.lang.String); 
	public java.lang.String getName(); 
	public java.lang.String getDesc(); 
	public java.lang.String toString(); 
	static {}; 
}
  1. 传统的 public static final Season2 SPRING = new Season2(“春天”, “温暖”); 简化成SPRING(“春天”, “温暖”); 这里要明白它调用的哪个构造器. 格式: 对象名(实参列表), 这里实参列表是传给构造器的
  2. 如果使用无参构造器, 创建枚举对象, 则实参列表和小括号都可以省略(省不省略都可以)
  3. 当有多个枚举对象的时候,使用’ , ’ 间隔, 最后一个用分号结尾 枚举对象必须放在枚举类的行首

课堂练习

enum Gender{
	BOY, GIRL;
}

正确的写法, 调用无参构造器, 对象名是BOY, 和GIRL. 这里对象名就是常量名, 一般枚举类内部定义的变量后续操作不可更改, 视为常量.

enum常用方法说明

原理: 使用enum时, 会所建类会隐式继承Enum类, 这样我们就可以使用Enum类相关的方法
**对象名.name(); **输出对象的名字
**对象名.ordinal();**输出对象的编号,从0开始
类名.values(); 返回枚举类定义的所有对象, 返回的是一个数组
新知识点: 增强for循环, for(Season2 season : values){}/每次循环将数组的一个元素传入到season, 没有了就退出
**类名.valueOf()**将字符串转化为枚举对象, 要求字符串必须为已有的常量名, 否则报错

//1.根据输入的名称"SPRING"到Season2的枚举类对象去查找,找到了就返回给spring1对象,否则报错
Season2  spring1=Season2.valueOf("SPRING");

且返回类型的对象引用类型, 即运行类型的地址

compareTo 比较两个枚举常量(对象), 比较的是编号对应values

enum实现接口

使用enum关键字后, 所创建的类不能再继承其他类了, 因为enum会隐式继承Enum, 而java是单继承机制
枚举类和普通类一样, 可以实现接口, 如下格式

enum 类名 implements 接口1, 接口2{
}
以上就是enum类的全部内容了, 有不正确的地方欢迎大佬指正, 在下是编程小白蓝鸟x

版权声明:本文为weixin_46619912原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。