1. 当你创建一个enum类时,编译器会为你生成一个相关的类,这个类继承自Enum

/*** 枚举类默认继承的java.lang.Enum类(编译器控制),所以不能再继承其它类 * Enum实现了 Comparable<E>, Serializable 接口*/
public enum MeiJu {MEIJU1, MEIJU2, MEIJU3, MEIJU4
} 
public class Test {public static void main(String[] args) {// 注意这里已经向上转型了哦for (Enum<MeiJu> meiju : MeiJu.values()) {// ------------------下面都是父类(Enum)提供的方法--------------------// 返回枚举常量的序数ordinal,final修饰,不可变,按声明时的顺序System.err.println("ordinal():" + meiju.ordinal());// 输出:0 、1 、 2、3// 返回枚举常量的名称name,final修饰,不可变// 跟meiju.toString()返回内容是一样的:都是 return this.name;// 不过如果使用toString(),可以对其重写System.err.println("name():" + meiju.name());// 输出: MEIJU1 、MEIJU2 、MEIJU3、MEIJU4// 只能比较同一枚举类下的枚举常量,so 比较的是声明顺序ordinalSystem.err.println("compareTo():" + meiju.compareTo(MeiJu.MEIJU2));// 输出 -1 、0 、1、2// 返回 return this == MeiJu.MEIJU2;System.err.println("equals():" + meiju.equals(MeiJu.MEIJU2));// 输出:false true false false// 跟这个结果一样meiju.getClass(),没有找到不一样的情况 ??System.err.println("getDeclaringClass():" + meiju.getDeclaringClass());// 输出:都是 class package.MeiJu// 还有一个 hashCode() 它返回的是 super.hashCode();// Enum 的 super 就是 Object 了// 搞不明白这玩意干什么用MeiJu valueOf = Enum.valueOf(meiju.getDeclaringClass(),meiju.name());// 其它就没什么了吧。。。。上面蓝色字体略掉了}}
}

细心人士,会发现上面的代码中,我并没有给枚举类MeiJu添加方法,而且Enum中也没有values()方法。原因看下面两个图片比较一下

 2. 给枚举定义方法,记得在枚举常量后面加";"

public enum MeiJu {//定义每个枚举实例,如果有构造方法,必须通过构造方法初始化定义;MEIJU1("husband"),MEIJU2("wife"),MEIJU3("son"),MEIJU4("xiaosan");private String property; //属性private MeiJu(String property) { //只能在内部使用this.property = property;}@Overridepublic String toString() {return name() + ":" + property;}public static void main(String[] args) {for (MeiJu meiju : MeiJu.values()) {System.err.println( meiju.toString());}}
}

输出:

MEIJU1:husband
        MEIJU2:wife
        MEIJU3:son
        MEIJU4:xiaosan

3. 枚举使用 switch

public class Test {public String test(MeiJu meiju) {switch (meiju) {case MEIJU1 : return meiju.toString();case MEIJU2 : return meiju.toString();case MEIJU3 : return meiju.toString();case MEIJU4 : return meiju.toString();default :return "";}}public static void main(String[] args) {Test t = new Test();System.err.println(t.test(MeiJu.MEIJU4));}
}

输出:MEIJU4:xiaosan

4. Class还给枚举类弄了个专属武器getEnumConstants(),所以即使在enum被向上转型也能得到其所有实例。

public class Test {public void test(Enum<?> meiju) {// 注意:Enum是没有 meiju.values() 方法的。// 不过Class中有方法getEnumConstants()可以得到枚举所有实例for (Enum<?> en : meiju.getClass().getEnumConstants()) {System.err.println(en.toString());// 覆盖后的toString}}public static void main(String[] args) {Test t = new Test();t.test(MeiJu.MEIJU4);}
}
public class Test {// 上面方法的扩展public <E extends Enum<E>> void test(Class<E> meiju) {// 泛型 参考上一篇 java泛型for (E en : meiju.getEnumConstants()) {System.err.println(en.toString());}}public static void main(String[] args) {Test t = new Test();t.test(MeiJu.MEIJU4.getDeclaringClass());// t.test(MeiJu.MEIJU4.getClass()); //这样就不行了t.test((Class) MeiJu.MEIJU4.getClass());// 这样可以,但是一堆警告}
}
  

输出:

MEIJU1:husband
       MEIJU2:wife
       MEIJU3:son
       MEIJU4:xiaosan

5. 通过枚举管理枚举

public enum MeiJu {;//注意这里有个";"enum MeiJu1 {A, B, C}enum MeiJu2 {D, E, F}public static void main(String[] args) {for (MeiJu1 meiju1 : MeiJu.MeiJu1.values()) {System.err.print(meiju1); //输出:ABC}}
}

6.EnumSet现在是个抽象类(JavaSE 7),EnumMap不是 ,不行了搞不动了。。这就研究到这了

java 枚举Enum相关推荐

  1. Java枚举(Enum)类型使用的正确姿势

    关于Java Enum的介绍及原理参见 Java枚举(Enum)类型的基本介绍与原理探求 Enum类型的基本使用 定义一个枚举类的主要作用就是在逻辑代码中对某个变量的值进行比较.同样以季节的枚举类Se ...

  2. Java 枚举(enum) 7种常见的用法

    在JDK1.5引入了新的类型--枚举.在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是 ...

  3. Java枚举(enum)常用的用法总结

    Java枚举[enum] Java枚举(enum)七种常见的用法汇总如下: 用法一:常量 用法二:switch 用法三:向枚举中添加新方法 用法四:覆盖枚举的方法 用法五:实现接口 用法六:使用接口组 ...

  4. [转载] java 枚举Enum源码解析

    参考链接: 使用Java枚举 应用场景 枚举是单例模式中的一种.面试官系统之设计模式(单例模式) 简单来讲就是只能实例化一次,线程安全且性能高.枚举通常用来列举一个类型的有限实例集合,我们可以使用常量 ...

  5. Java 枚举(enum)

    Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等. Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 ...

  6. Java枚举(Enum)类型的基本介绍与原理探求

    Enum枚举类型 Enum的全写是Enumeration,这个词的翻译是列举.逐条陈述.细目.在程序语言中,枚举类型是一种特殊的数据类型(常用的数据类型比如字符串.整型),这种数据类型的变量值限定在固 ...

  7. Java 枚举(enum) 详解7种常见的用法<详细>

    JDK1.5引入了新的类型--枚举.在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便. 大师兄我[大师兄]又加上自己的理解,来帮助各位理解一下 ...

  8. Java 枚举(enum) 详解7种常见的用法-小白笔记

    目录 用法一:常量 用法二:switch 用法三:向枚举中添加新方法 用法四:覆盖枚举的方法 用法五:实现接口 用法六:使用接口组织枚举 用法七:关于枚举集合的使用 用法一:常量 在JDK1.5 之前 ...

  9. Java 枚举(enum) 六种常用的方法详解

    JDK1.5引入了新的类型--枚举,在java中虽然枚举只是一个很小的功能,却给我们带来了很大的方便. 首先我们要了解几个概念,enum是没有构造函数的,准确的来说是没有public类型的构造函数, ...

  10. Java (枚举) Enum 详解

    枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数.枚举在日常生活中很常见,例如表示星期的SUNDAY.MONDAY.TUESDAY.WEDNESDAY.THURSDAY.FRIDAY.SA ...

最新文章

  1. 2019 快过去了,自动驾驶发展得怎么样了?
  2. Android API Level对应Android版本一览表
  3. 问题 | 解决Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll 问题(pycharm+Tensorflow)
  4. php mysql curd_Php mysql 常用代码、CURD操作以及简单查询
  5. mysql数据表设计要点以及快门
  6. linux0.11文件分析
  7. 【Python学习】 - 手写数字识别 - python读入mnist数据集的多种方法
  8. java Iterator的next()、previous()、set()究竟指向哪里?
  9. PHP常用时间函数总结
  10. arduino 步进电机驱动库_Arduino基础入门篇27—步进电机驱动库的使用
  11. 为什么onenote一直在加载_【完美解决】11.OneNote中英文字体不统一,微软10多年未解决的Bug!...
  12. python去除视频马赛克_手把手教你用Python去除马赛克!
  13. iOS自带的GPS 定位
  14. 根据数据文件sql生成报告rpt
  15. 附加SQL Server MDF文件的不同方法
  16. [NOIP2010 普及组] 数字统计
  17. 投资 - 指标介绍: MACD
  18. 文件或目录损坏其无法读取问题解决方法2022-9-15
  19. 蓝牙连接的sco问题
  20. 淘宝客导购产品设计(二)

热门文章

  1. Ubuntu安装字体
  2. Codepen 每日精选(2018-3-26)
  3. js验证银行卡身份证手机号中文数字金额等
  4. C++ 自定义函数(全)
  5. 微信公众号小白的进阶之路
  6. centos7 wget无法解析主机域名的解决办法
  7. C++之binary_search二分查找算法
  8. 金融分析(三)------联合分布,边缘分布,条件概率密度
  9. 【java导出PDF】
  10. 2021春节档电影数据分析