Java枚举类的简单使用
参考:
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枚举类的简单使用相关推荐
- 学妹问我Java枚举类与注解,我直接用这个搞定她!
很多人问我学妹长什么样,不多说 上图吧! 学妹问我Java枚举类与注解,我直接一篇文章搞定! 一.枚举类 ① 自定义枚举类 ② enum关键字定义枚举类 ③ enum 枚举类的方法 ④ enum 枚举 ...
- java 枚举类组合在一起_Java,.NET,但为什么在一起?
java 枚举类组合在一起 十二年前,Sun微系统公司大张旗鼓地宣布了一种新的编程语言和环境,用于使网页更具动态性和"活力". 当然,现在,Java编程语言是一种无处不在的工具,它 ...
- Java枚举类使用方式
Java枚举类使用方式 单枚举定义 : /*** * @title: 单枚举定义* @author: wll* @since: 2021-1-27 14:47:54*/ public enum Jud ...
- 比起睡觉,我更喜欢刷巨详细的Java枚举类,这是来自猿人的自觉呀
零基础学习之Java枚举类 概述 JDK1.5之前 创建枚举类 代码示例 JDK1.5之后 创建枚举类 代码示例 枚举类继承父类 基本介绍 代码示例 枚举类实现接口 基本介绍 代码示例 枚举类实现单例 ...
- java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘
java枚举类中字段有没有必要加final 今天在写一个系统统一返回码的枚举类时候,突然想到一个问题,当不小心手抖给枚举类自动生成了set方法,而恰巧在用的地方不小心用了set方法,从而修改了code ...
- JAVA 枚举类的初步理解
JAVA 枚举类的初步理解 现在Java的枚举类在真实项目中已经用的比较频繁,比静态常量更好用,也更有限定性,enum类可以用来表示有限的类对象,比如星期.月份.性别或者项目中的产品类型 像诸如此类的 ...
- java 枚举类型enum ppt,关于JAVA枚举类使用的异常
当前位置:我的异常网» J2SE » 关于JAVA枚举类使用的异常 关于JAVA枚举类使用的异常 www.myexceptions.net 网友分享于:2013-01-24 浏览:5次 关于JAV ...
- Java枚举类使用要点
Java枚举类 Java中的枚举类型定义使用enum关键字,定义时,系统默认继承Enum抽象类.先来看一下枚举类的使用. enum Sex {// 枚举对象必须要在第一行MAIL("男&qu ...
- Java枚举类的写法
Java枚举类的写法 枚举也是一个类(枚举对象,属性,构造器,get方法),由于是枚举,一般我们只需要得到值,而不需要set值
- java mybatis enum_mybatis处理枚举类的简单方法
mybatis自带对枚举的处理类 org.apache.ibatis.type.EnumOrdinalTypeHandler :该类实现了枚举类型和Integer类型的相互转换. 但是给转换仅仅是将对 ...
最新文章
- 使用 shell 脚本对 Linux 系统和进程资源进行监控
- Uchome的登录验证机制
- 设置图的位置_消防泵房内设备、管网、阀门的设置及系统图
- (转载)java list排序
- Java,如果这是一个更好的世界
- 你知道哪些情况下不该使用深度学习吗?
- 图文结合,白话Go的垃圾回收原理
- C语言程序怎么保存文件,急求如何将下列C语言程序数据存储到文件中?
- C语言串 typedef char String[MaxLength + 1]
- jquery validate的验证规则和验证提示
- 64脚和小于64脚的STM32进行AD时注意,参照电源处理方法(转)
- 如何买基金(一):三分钟读懂基金分类
- 反垃圾邮件智能网关之梭子鱼
- python统计个数的函数_NumPy常用的统计函数
- Oracle中Start With的用法
- 大数据用kettle还是python_kettle大数据抽取实际
- 通过ajax接口爬取智联招聘
- 【转载】STM32F103C8T6 FTT音乐频谱分析与显示
- 【my eclipse tips】Could not create the view: An unexpected exception was thrown问题
- python3 分离gif
热门文章
- C语言获取linux接口状态,[linux] C语言Linux系统编程-TCP通信的11种状态
- 当前串口号不可以或被占用_原来团建是可以不占用私人时间当然,还可以拿加班费|不一样的团建...
- Java进阶:微服务SpringCloud
- SQL:postgresql查询结果加一个自定义的列
- 论文阅读笔记(十五)——脸识别作为绵羊生物特征识别的初步研究
- 浅谈CSwin-Transformers
- Java语言基础:常量和变量
- Beta阶段 - 博客链接合集
- Python mysql-表的创建,删除和更新
- 喵哈哈村的魔法考试 Round #14 (Div.2) 题解