Java Enum枚举 Enum类 带有构造方法的枚举 带有抽象方法的枚举
2021/11/6 1:09:47
本文主要是介绍Java Enum枚举 Enum类 带有构造方法的枚举 带有抽象方法的枚举,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java 枚举(enum) 是一个特殊的类,一般表示一组常量、enum 定义的枚举类默认继承了 java.lang.Enum 类
1. 基本应用
Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 ,
来分割
public enum Weekday { // 枚举 Weekday 是一个特殊的类 // 每个枚举常量(如:SUN)都是一个Weekday的实例对象,并且都默认具备 public static final 修饰符 SUN, MON, TUE, WED, THU, FRI, SAT }
枚举常用方法:
values()
以数组形式返回枚举类型的所有成员ordinal()
方法可以找到每个枚举常量的索引,就像数组索引一样valueOf()
方法返回指定字符串值的枚举常量、不存在的会报错IllegalArgumentException
public class WeekdayEnumTest { public static void main(String[] args) { // 迭代枚举 for (Weekday weekday : Weekday.values()) { System.out.println(weekday.ordinal() + ": " + weekday.name()); } // 当使用枚举类型成员时,直接使用枚举名称调用成员即可 Weekday sunday = Weekday.SUN; System.out.println(sunday); Weekday mon = Weekday.valueOf("MON"); System.out.println(mon); } }
运行截图:
2. Enum类
enum 关键字定义的枚举类都默认继承了Enum 类(抽象类)、该类位于 java.lang下、该类具有两个 final 常量:
- name :枚举常量,如上例中的
SUN MON
等 - ordinal :类似数组索引,即位置(position)的意思,默认值从0开始
下为Enum类的部分源码:
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable { // The name of this enum constant, as declared in the enum declaration. private final String name; public final String name() { return name; } public String toString() { return name; } /** * The ordinal of this enumeration constant (its position in the enum declaration, * where the initial constant is assigned an ordinal of zero). */ private final int ordinal; public final int ordinal() { return ordinal; } // Sole constructor. Programmers cannot invoke this constructor. protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) { T result = enumType.enumConstantDirectory().get(name); if (result != null) return result; if (name == null) throw new NullPointerException("Name is null"); throw new IllegalArgumentException( "No enum constant " + enumType.getCanonicalName() + "." + name); } }
3. 构造方法
实现带有构造方法的枚举(项目中常使用的方式),示例:
public enum Sex { MALE(1, "男"), FEMALE(2, "女"); public final Integer type; public final String value; private Sex(Integer type, String value){ this.type = type; this.value = value; } }
public class SexEnumTest { public static void main(String[] args) { Sex man = Sex.MALE; System.out.println(man); // MALE 调用默认的toString() System.out.println(man.name()); // MALE System.out.println(man.ordinal()); // 0 System.out.println(man.type); // 1 System.out.println(man.value); // 男 } }
4. 抽象方法
带有抽象方法的枚举、在上例的基础上添加一个抽象方法,如下:
public enum Sex { MALE(1, "男"){ @Override public void haircut() { System.out.println("剃个光头吧~"); } }, FEMALE(2, "女"){ @Override public void haircut() { System.out.println("还是留长发吧~"); } }; public final Integer type; public final String value; private Sex(Integer type, String value){ this.type = type; this.value = value; } public abstract void haircut(); }
public class SexEnumTest { public static void main(String[] args) { Sex man = Sex.MALE; System.out.println(man); // MALE 调用默认的toString() System.out.println(man.name()); // MALE System.out.println(man.ordinal()); // 0 System.out.println(man.type); // 1 System.out.println(man.value); // 男 man.haircut(); // 剃个光头吧~ Sex.FEMALE.haircut(); // 还是留长发吧~ } }
这篇关于Java Enum枚举 Enum类 带有构造方法的枚举 带有抽象方法的枚举的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-30java最新版本是什么,有什么特性?-icode9专业技术文章分享
- 2024-11-30[开源]27.8K star!这款 Postman 替代工具太火了!
- 2024-11-30Gzip 压缩入门教程:轻松掌握文件压缩技巧
- 2024-11-29开源工具的魅力:让文档管理更“聪明”
- 2024-11-29Release-it开发入门教程
- 2024-11-29Rollup 插件入门教程:轻松掌握模块打包
- 2024-11-29从零到一,产品经理如何玩转项目管理和团队协作
- 2024-11-29如何通过精益生产管理工具帮助项目团队实现精准进度控制?
- 2024-11-29低代码应用开发课程:新手入门与基础教程
- 2024-11-29入门指南:全栈低代码开发课程