
java 枚举(enum)
发布日期:2021-05-07 10:30:32
浏览次数:21
分类:精选文章
本文共 4831 字,大约阅读时间需要 16 分钟。
介绍
- 枚举是一组常量的集合
- 枚举属于一种特殊的类,里面只包含一组有限的特定的对象
枚举的实现方式
- 自定义类实现枚举
/** * @author 刘龙 * @version 1.0 */public class Enumeration01 { public static void main(String[] args) { // 对于季节,对象的值是具体的,是固定的四个,不会有更多 System.out.println(Season.SPRING); }}/** * 自定义枚举类 */class Season { private String name; private String desc; /** * 定义了4个对象 */ public static final Season SPRING = new Season("春天", "温暖"); public static final Season WINTER = new Season("冬天", "寒冷"); public static final Season SUMMER = new Season("夏天", "炎热"); public static final Season AUTUMN = new Season("秋天", "凉爽"); /** * 1.将构造器私有化 * 2.去掉setXxx方法,防止属性被修改 * 3.在Season内部,直接创建固定的对象 * 4.优化,加入final修饰符 * @param name * @param desc */ private Season(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } public String getDesc() { return desc; } @Override public String toString() { return "Season{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; }}
使用enum关键字实现枚举
- 当我们使用enum关键字开发一个枚举类时,默认会继承Enum类
- 传统的public static final Season2 SPRING = new Season2(“春天”,“温暖”), 简化成SPRING(“春天”,“温暖”)
- 如果使用无参构造器 创建 枚举对象, 则实参列表和小括号可以省略
- 当有多个枚举对象时,使用,间隔,最后有一个分号结尾
- 枚举对象必须放在枚举类的行首
/** * @author 刘龙 * @version 1.0 */public class Enumeration02 { public static void main(String[] args) { Season2 autumn = Season2.AUTUMN; // 返回当前对象的名称 AUTUMN System.out.println(autumn.name()); // 没有重写toString()返回 对象的名称 // AUTUMN System.out.println(autumn); // 返回当前对象的位置号,默认从0开始 3 System.out.println(autumn.ordinal()); // 返回定义的所有对象,根据对象输出名称 // SPRING // WINTER // SUMMER // AUTUMN Season2[] values = Season2.values(); for (Season2 value : values) { System.out.println(value.name()); } // 根据字符串寻找指定的枚举对象,要求字符串必须为已有的常量名 Season2 summer = Season2.valueOf("SUMMER"); System.out.println(summer); }}/** * 使用enum关键字来实现枚举 */enum Season2 { /** * 定义了4个对象 * 如果使用了enum关键字来实现枚举 * 1.使用关键字enum 替代 class * 2.常量名(实参列表) * 3.如果有多个常量(对象). 使用.间隔开 * 4.如果使用enum实现枚举,要求将定义常量对象,写在前面 */ SPRING("春天", "温暖"),WINTER("冬天", "寒冷"),SUMMER("夏天", "炎热"),AUTUMN("秋天", "凉爽"); private String name; private String desc; /** * 1.将构造器私有化 * 2.去掉setXxx方法,防止属性被修改 * 3.在Season内部,直接创建固定的对象 * 4.优化,加入final修饰符 * @param name * @param desc */ private Season2(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } public String getDesc() { return desc; } @Override public String toString() { return "Season{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; }}
练习
public class EnumExercise02 { public static void main(String[] args) { Week[] values = Week.values(); for (Week value : values) { System.out.println(value.getName()); } }}enum Week{ MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),THURSDAY("星期四"),FRIDAY("星期五"), SATURDAY("星期六"),SUNDAY("星期天"); private String name; private Week(String name) { this.name = name; } public String getName() { return name; }}//输出星期一星期二星期三星期四星期五星期六星期天
练习2
interface ColorManager { void show();}enum Color implements ColorManager { RED(255, 0, 0), BLUE(0, 0, 255), BLACK(255, 255, 255), YELLOW; private int redValue; private int greenValue; private int blueValue; Color(int redValue, int greenValue, int blueValue) { this.redValue = redValue; this.greenValue = greenValue; this.blueValue = blueValue; } Color() { } @Override public void show() { System.out.println(toString()); } @Override public String toString() { return "Color{" + "redValue=" + redValue + ", greenValue=" + greenValue + ", blueValue=" + blueValue + '}'; }}public class Homework08 { public static void main(String[] args) { Color red = Color.RED; switch (red) { case RED: System.out.println("红色"); red.show(); break; case BLUE: break; case BLACK: break; case YELLOW: break; default: System.out.println("没有匹配到"); } }}//输出红色Color{ redValue=255, greenValue=0, blueValue=0}
小结
- 使用enum关键字后,就不能再继承其它类了,因为enum类会隐式继承Enum
- 枚举类和普通类一样,可以实现接口 enum 类名 implements 接口1, 接口2
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年05月13日 00时51分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
"WARNING: Increasing RAM size to 1GB" and "Cannot set up guest memory 'xxx.ram': Invalid argument".
2025-03-28
#if 0 #elif 1 #else #endif 用法
2025-03-28
(反射+内省机制的运用)简单模拟spring IoC容器的操作
2025-03-28
(转)tomcat7.0 manager app和host manager web管理
2025-03-28
.Net(C#)实现异步编程
2025-03-28
.Net中webBrowser控件JS交互
2025-03-28
02-Docker镜像分类及操作秘籍,轻松掌握导出、导入、删除
2025-03-28
04-docker-commit构建自定义镜像
2025-03-28
04-docker系列-commit构建自定义镜像
2025-03-28
05-docker系列-使用dockerfile构建镜像
2025-03-28
05-如何通过Dockerfile实现高效的应用容器化?
2025-03-28
09-docker系列-docker网络你了解多少(下)
2025-03-28
10-docker系列-docker文件共享和特权模式
2025-03-28
#C8# UVM中的factory机制 #S8.1.4# 约束的重载
2025-03-28
#C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形
2025-03-29