参考:
https://www.cnblogs.com/zhanqing/p/11076646.html

枚举类

  • 关键字enum
  • 相关细节
  • 枚举类的相关方法
  • 代码示例
    • 获取枚举实例
    • 获取枚举实例的位置
    • 比较2个枚举实例
    • 比较2个枚举实例是否相等
    • 获取全部枚举实例
    • 不重写toString方法
      • 主函数
      • ColorEnum 类
    • 重写toString方法添加对枚举实例的描述
      • 主函数
      • ColorEnum 类

关键字enum

Java中,枚举类型使用关键字enum进行声明,它是一种特殊的类。
通过关键字enum创建的枚举类型,在编译后事实上也是一个类类型,而且该类继承自java.lang.Enum类,同时编译器会将枚举类标记为final类。由于Java并不是支持多继承,所以enum声明的枚举类不能再继承其他类。

enum NotPossible extends Pet{} // 不正确

实际上,在Java中,多继承的功能可以通过多实现来实现,即实现一个或多个接口。

相关细节

Java要求必须先定义枚举实例(枚举常量)。如果在定义枚举实例之前定义了任何方法或属性,那么编译会报错。
如果打算在枚举类中定义(或重写)方法,则需要在枚举实例序列的最后添加分号“;”。
只能在枚举类的内部使用其构造器创建枚举实例。事实上,构造器只在构造枚举实例时被调用,一旦枚举类的定义结束,编译器就不允许我们再使用其构造器来创建任何实例了,所以一般将枚举类的构造器定义为private,当然即使我们使用其他权限修饰符定义构造器,也无法在外部生成枚举实例,这是由编译器保证的
除此之外,我们也可以自定义构造函数。在声明枚举实例的同时给构造函数传入实参,这样便可以使用实参,添加对每个枚举实例的描述。然后使用重写的toString(),返回这个描述信息。而默认的toString()方法只能返回枚举实例的名字。
在继承自Enum类的方法中,只有toString()不是final的。换句话说,枚举类只能重写(覆盖)toString()方法。但是可以向枚举类中添加方法。

枚举类的相关方法

比较2个枚举常量是否相等,可以使用==,也可以使用equals方法。
name() : 返回枚举实例声明时的名字,这与使用默认的toString()方法效果相同。
values() : 返回一个包含所有枚举实例的数组,其类型为枚举类。
ordinal(): 返回枚举实例对应的位置(位置从0开始)
int compareTo(E other): 用来比较如果枚举实例出现在Other之前,则返回一个负值;如果this=other,则返回0;否则返回正值。枚举常量的出现次序在enum声明中给出。

代码示例

获取枚举实例

 // 获取枚举实例的方法1ColorEnum s1 = ColorEnum.RED; // 获取枚举实例的方法2ColorEnum s2 = Enum.valueOf(ColorEnum .class, "WHITE");

获取枚举实例的位置

枚举实例的位置,同定义时的顺序一致,位置从0开始计数。

 // 获取枚举实例的位置【从0开始】int index = s2.ordinal();

比较2个枚举实例

 int resBe = s1.compareTo(s2);System.out.println("resBe = "+resBe);

比较2个枚举实例是否相等

 if(s2==s1){System.out.println("相等");}else{ System.out.println("不相等");}// 使用equals方法if(s2.equals(s1)){System.out.println("相等");}else{ System.out.println("不相等");}

获取全部枚举实例

可以使用values方法获取全部的枚举实例。

 ColorEnum [] arrs = ColorEnum.values();// 打印所有枚举实例for(ColorEnum s:arrs){System.out.println(s.toString());}

不重写toString方法

在原始情况下,即没有重写toString方法时,枚举类的name方法和toString方法返回的结果是一样的。

主函数

public class ColorEnumTest {public static void main(String[] args) {// 获得枚举实例ColorEnum s1 = ColorEnum.RED;// 得到枚举实例的描述System.out.println(s1.toString());System.out.println(s1.name());}
}

ColorEnum 类

public enum ColorEnum {// 枚举实例RED,GREEN,WHITE,YELLOW;
}

重写toString方法添加对枚举实例的描述

主函数

可以看到,ColorEnum枚举类的构造函数被调用了4次,正好对应4个枚举实例。也就是说每生成1个枚举实例,编译器都会自动调用该枚举类的构造函数。

public class ColorEnumTest {public static void main(String[] args) {// 获得枚举实例ColorEnum s1 = ColorEnum.RED;// 使用重写的toString方法得到枚举实例的描述System.out.println(s1.toString());System.out.println(s1.name());}
}

ColorEnum 类

public enum ColorEnum {// 枚举实例,生成实例的时候调用了构造器,括号内都是传给构造器的实参RED("红色",1),GREEN("绿色",2),WHITE("白色",3),YELLOW("黄色",4);// 成员变量private String name;private int index;// 私有的构造方法private ColorEnum(String name,int index) {System.out.println("Color的构造方法");this.name = name;this.index = index;}// 重写toString方法@Overridepublic String toString() {return this.index + "--" + this.name;}
}

Java枚举类的简单使用相关推荐

  1. 学妹问我Java枚举类与注解,我直接用这个搞定她!

    很多人问我学妹长什么样,不多说 上图吧! 学妹问我Java枚举类与注解,我直接一篇文章搞定! 一.枚举类 ① 自定义枚举类 ② enum关键字定义枚举类 ③ enum 枚举类的方法 ④ enum 枚举 ...

  2. java 枚举类组合在一起_Java,.NET,但为什么在一起?

    java 枚举类组合在一起 十二年前,Sun微系统公司大张旗鼓地宣布了一种新的编程语言和环境,用于使网页更具动态性和"活力". 当然,现在,Java编程语言是一种无处不在的工具,它 ...

  3. Java枚举类使用方式

    Java枚举类使用方式 单枚举定义 : /*** * @title: 单枚举定义* @author: wll* @since: 2021-1-27 14:47:54*/ public enum Jud ...

  4. 比起睡觉,我更喜欢刷巨详细的Java枚举类,这是来自猿人的自觉呀

    零基础学习之Java枚举类 概述 JDK1.5之前 创建枚举类 代码示例 JDK1.5之后 创建枚举类 代码示例 枚举类继承父类 基本介绍 代码示例 枚举类实现接口 基本介绍 代码示例 枚举类实现单例 ...

  5. java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘

    java枚举类中字段有没有必要加final 今天在写一个系统统一返回码的枚举类时候,突然想到一个问题,当不小心手抖给枚举类自动生成了set方法,而恰巧在用的地方不小心用了set方法,从而修改了code ...

  6. JAVA 枚举类的初步理解

    JAVA 枚举类的初步理解 现在Java的枚举类在真实项目中已经用的比较频繁,比静态常量更好用,也更有限定性,enum类可以用来表示有限的类对象,比如星期.月份.性别或者项目中的产品类型 像诸如此类的 ...

  7. java 枚举类型enum ppt,关于JAVA枚举类使用的异常

    当前位置:我的异常网» J2SE » 关于JAVA枚举类使用的异常 关于JAVA枚举类使用的异常 www.myexceptions.net  网友分享于:2013-01-24  浏览:5次 关于JAV ...

  8. Java枚举类使用要点

    Java枚举类 Java中的枚举类型定义使用enum关键字,定义时,系统默认继承Enum抽象类.先来看一下枚举类的使用. enum Sex {// 枚举对象必须要在第一行MAIL("男&qu ...

  9. Java枚举类的写法

    Java枚举类的写法 枚举也是一个类(枚举对象,属性,构造器,get方法),由于是枚举,一般我们只需要得到值,而不需要set值

  10. java mybatis enum_mybatis处理枚举类的简单方法

    mybatis自带对枚举的处理类 org.apache.ibatis.type.EnumOrdinalTypeHandler :该类实现了枚举类型和Integer类型的相互转换. 但是给转换仅仅是将对 ...

最新文章

  1. 使用 shell 脚本对 Linux 系统和进程资源进行监控
  2. Uchome的登录验证机制
  3. 设置图的位置_消防泵房内设备、管网、阀门的设置及系统图
  4. (转载)java list排序
  5. Java,如果这是一个更好的世界
  6. 你知道哪些情况下不该使用深度学习吗?
  7. 图文结合,白话Go的垃圾回收原理
  8. C语言程序怎么保存文件,急求如何将下列C语言程序数据存储到文件中?
  9. C语言串 typedef char String[MaxLength + 1]
  10. jquery validate的验证规则和验证提示
  11. 64脚和小于64脚的STM32进行AD时注意,参照电源处理方法(转)
  12. 如何买基金(一):三分钟读懂基金分类
  13. 反垃圾邮件智能网关之梭子鱼
  14. python统计个数的函数_NumPy常用的统计函数
  15. Oracle中Start With的用法
  16. 大数据用kettle还是python_kettle大数据抽取实际
  17. 通过ajax接口爬取智联招聘
  18. 【转载】STM32F103C8T6 FTT音乐频谱分析与显示
  19. 【my eclipse tips】Could not create the view: An unexpected exception was thrown问题
  20. python3 分离gif

热门文章

  1. C语言获取linux接口状态,[linux] C语言Linux系统编程-TCP通信的11种状态
  2. 当前串口号不可以或被占用_原来团建是可以不占用私人时间当然,还可以拿加班费|不一样的团建...
  3. Java进阶:微服务SpringCloud
  4. SQL:postgresql查询结果加一个自定义的列
  5. 论文阅读笔记(十五)——脸识别作为绵羊生物特征识别的初步研究
  6. 浅谈CSwin-Transformers
  7. Java语言基础:常量和变量
  8. Beta阶段 - 博客链接合集
  9. Python mysql-表的创建,删除和更新
  10. 喵哈哈村的魔法考试 Round #14 (Div.2) 题解