简介:
enum是JAVA SE5中新添加的特性,关键字enum可以将一组具名的值的有限集合创建为一种新的类型(即枚举类)这些具名的值可以作为常规的程序组件使用。
首先看一个最简单的enum类:
public enum Color{
RED, GREEN, YELLOW
}
看起来像一个普通的类,据“一切皆对象”的宗旨来看,enum的确是一个“不普通”的类,事实上,在创建enum时,编译器会为你创建一个相关类,这个类继承自java.lang.Enum。Enum类实现了Compareable和Serializable接口。
enum的简单特性:
1.什么是枚举类
简介中介绍了:枚举类是一组具名的值的有限集合。那么其中具有的值是什么的,类除了自己的属性 & 方法(包括构造方法)就只剩下对象了。而上文中的Color枚举类中并无属性 & 方法,故此RED、GREEN、YELLOW这些“具名的值”实际上是类的对象。(这就是枚举类的特殊之处,在定义类的时候,类对象被同时定义封装了)。
而且这些枚举值(对象)都是常量的,即public static final 类型的。
想一下也是合情合理的。
枚举类就是外部访问的,public肯定是必须的;
枚举类的用途主要是为了区分有限集合的分类情况,并不主要用于实现什么功能,只需要为其他类提供引用即可。更何况在类定义的时候对象已经生成,因此static也是必要的;
枚举类是类构造者定义的,并不允许客户端程序员修改,因此final也是必要的。
画外音:按照命名惯例都用大写字母表示(多个单词中间用下划线隔开)
2.一个更加丰满的枚举类
既然枚举类是类,就可以有自己的成员变量、方法以及构造器。看下面的例子:
public enum Color{ RED("It's RED now ,stop crossing the road"), GREEN("It's GREEN ,you can go through"), YELLOW("It's YELLOW,you'd better wait for a while"); private String description; private Color(String description){ this.description = description; } public String getDescription(){ return description; } }
这里有几点需要稍稍留意一下:
a).如果你定义了自己的方法(包括构造器)则必须在enum实例序列的最后添加一个分号(注意:简单enum类是没有分号的)
b)自定义的方法(包含重写的方法) 和属性,必须写在enum实例之后,否则会编译错误
c)这里我们将构造器声明为private,其实我们只能在enum类的内部使用其构造器创建 枚举实例,一旦enum类定义结束,编译器就不允许我们在使用构造器来创建任何对象了,因此即便不声明为private对其访问性也没有任何区别(根据http://www.iteye.com/problems/81762所讲,构造器是可以声明为public的,但是eclipse还是报错了,不解)
d)enum类是final类型,无法被继承。
3.枚举类的常用方法
jd大神的博客中已经交代了,就不再啰嗦http://249326109.iteye.com/blog/1681605
4.switch中的enum
一直以为枚举跟switch是绝配,使用起来是非常方便的 ,这里copy一下jd的代码
package enumTest; public class EnumTest { enum Color { RED(255, 0, 0), BLUE(0, 0, 255), BLACK(0, 0, 0), YELLOW(255, 255, 0), GREEN( 0, 255, 0); // 构造枚举值,比如RED(255,0,0) private Color(int rv, int gv, int bv) { this.redValue = rv; this.greenValue = gv; this.blueValue = bv; } public String toString() { // 自定义的public方法 return super.toString() + "(" + redValue + "," + greenValue + "," + blueValue + ")"; } private int redValue; // 自定义数据域,private为了封装。 private int greenValue; private int blueValue; } public static void main(String args[]) { // Color colors=new Color(100,200,300); //错误,因为这个方法是私有的 Color color = Color.RED; System.out.println(color); // 调用了toString()方法 System.out.println(Color.BLACK.ordinal()); // values 方法返回 Color[] colors = Color.values(); for (Color c : colors) System.out.println(c); Color c = Color.RED; switch (c) { case RED: System.out.println("it's red"); break; case BLUE: System.out.println("it's blue"); break; case BLACK: System.out.println("it's blue"); break; } } }
值得注意的是:编译器并不要求switch中有default语句,也不要求每个枚举实例都有相应的case,所以要注意覆盖掉所有的分支。但是,如果在case语句中调用了return语句(无论是否覆盖所有的枚举实例),编译器就会要求default语句了。
相关推荐
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
杂货产品检测43-YOLO(v5至v9)、CreateML、Paligemma、TFRecord、VOC数据集合集.rarIPCV分配-V6 2024-01-21 6:10 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括7012张图像。 家庭废物以createMl格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为640x640(拉伸) 没有应用图像增强技术。
Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、本项目仅用作交流学习参考,请切勿用于商业用途。
谁喜欢谁下载,没啥商业价值,comsol也能做,不过我这产量更大
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
推箱子Python小游戏
该新媒体视域下的中国古诗词展演主要为管理员和用户两类用户角色提供需求,管理员在后台可以对系统进行全面管理,用户在前台可以进行查看系统信息,注册登录,查询校园失物,评论,下载校园失物等操作。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7
内容概要:本文介绍了使用MATLAB实现PSO-BiLSTM-Attention粒子群优化双向长短期记忆神经网络融合注意力机制的多特征分类预测模型。通过PSO优化BiLSTM模型的超参数、引入注意力机制增强模型的特征提取能力,提升了多维度数据的分类精度。模型在金融风险预测、医疗健康预测、交通流量预测等多个领域具有广泛的应用前景。项目详细描述了模型架构、代码实现、训练与优化、模型评估与可视化、以及GUI界面设计等方面的内容。 适合人群:具备一定编程基础,工作1-3年的数据科学家和机器学习工程师。 使用场景及目标:① 金融、医疗、交通等领域的多特征分类预测任务;② 结合PSO优化BiLSTM超参数、引入注意力机制,提升模型预测准确度。 阅读建议:本文详细讲解了模型的理论背景、算法实现和应用案例,适合希望深入理解深度学习和优化算法的读者。建议结合代码和实际数据进行实验,以便更好地掌握模型的设计和优化过程。
Java项目-基于SSM的物资管理系统项目源码
Video_2024-12-18_000023.wmv
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
系统实现: 用户功能模块:用户点击进入到系统操作界面,可以对主页、个人中心、我的收藏管理、订单管理等功能模块,我的收藏管理:通过列表可以获取用户ID、收藏ID、表名、收藏名称、收藏图片信息并进行修改操作 管理员功能模块:管理员通过用户名和密码填写完成后进行登录。管理员登录成功后进入到系统操作界面,可以对主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等功能模块进行相对应操作。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
1、嵌入式物联网单片机项目开发实战。例程经过精心编写,简单好用。 2、代码使用KEIL 标准库开发,当前在STM32F103运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件下载时,请注意keil选择项是jlink还是stlink。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。
项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7
Java项目-基于SSM的网上淘书吧
内容概要:本文详细介绍了 Oracle 19c 中的闪回技术,包括闪回查询、闪回事务查询、闪回丢弃、闪回表、闪回数据库和闪回归档。具体讲解了每种闪回技术的原理、配置方法、操作步骤和限制条件,并提供了具体的实例和 SQL 命令。目的是帮助数据库管理员和开发人员理解和掌握如何利用这些技术来提高数据恢复和错误修复的能力,减少数据库管理的复杂性和风险。 适合人群:Oracle 数据库管理员、数据库开发人员及维护人员。 使用场景及目标:① 使用闪回技术快速恢复因误操作或其他错误导致的数据丢失;② 配置闪回技术以实现高效的数据库恢复;③ 在日常运维中监控和管理闪回操作。 其他说明:本文不仅提供了理论上的解释,还包含了实际操作的示例,以便读者能够更好地理解和应用这些技术。