课时111:定义枚举类

简介: 课时111介绍了枚举类的定义和使用。主要内容包括:枚举的概念、定义及与多例设计的区别,`values()`方法获取所有枚举对象,以及枚举在`switch`语句中的应用。枚举从JDK 1.5引入,简化了有限对象集合的定义,代码更简洁且编译时即可检查错误。示例展示了如何定义和使用枚举类,并对比了多例设计的复杂性。

课时111:定义枚举类


01.枚举的基本定义

 

1.1枚举的主要作用


(1)很多的编程语言都会提供有枚举的概念,但是 Java 一直到了JDK 1.5之后才提出了所谓枚举的概念。在实际的开发之中枚举的主要作用是用于定义有限个数对象的一种结构(多例设计),枚举就属于多例设计,并且其结构要比多力设计更加的简单。


(2)从JDK 1.5之后,在程序之中提供有 Enum 的关键字,利用此关键字可以实现枚举的定义。

 

1.2范例:定义一个枚举


(1) 举枚设计

enum  Color {  // 枚举类
RED,GREEN,BLUE ;  // 实例化对象
}
public class JavaDemo  { 
public static void main(string args[ ]) {
Color c = Color.RED ; // 获取实例化对象
System.out.println(c);
}
}

image.png

2多例设计

enum Color { // 枚举类
红色,绿色,蓝色;  // 实例化对象
}
public class JavaDemo  { 
public static void main(string args[]) {
Color c = color.红色 ; // 获取实例化对象
System.out.println(c) ;
}
}

image.png

(2) 对比

如果此时采用了多例设计模式来进行设计,那么需要编写很多的程序代码,这样对于开发的复杂度是比较高的,因为里面牵扯到了构造方法的私有化以及静态方法。


以多例设计来举例没有一个缺点,要想获得实例化对象必须用 System 方法,假如上传的参数不正确就无法在程序编译的过程中知道哪里出错了。


System 代码:

private Color(string title) { //构造方法私有化
  this.title= title ;
}
Public statiC Color getinstance(string Color) {
  switch(color){
Case "red”:return RED;
Case "green”:return GREEN;
Case "blue”:return BLUE;
default:return null ;
}
}
public string tostring()
return this.title ;
}
}
public class JavaDemo {
public static void main(String argsl] {
Color C = Color.getInstance(“pink”);
System.out.println(c);
}
}

没有值,这个程序就会返回空,在程序编译的时候发现“Pink”会更好

枚举代码:

Enum Color {  // 枚举类
RED ,GREEN ,BLUE  ;  // 实例化对象
}
Public class JavaDemo { 
public static void main (String args [] ) {
Color c=Color .PINK ;
System.out.println(c) ;
      }
   }

假如写错Pink,会出现错误:找不到符号

image.png

通过这样的特点,发现多例设计与枚举设计虽然可以实现相同的功能,但是使用枚举可以在程序编译的时候判断所使用实例化对象是否存在。


而多例和泛型判断不出来,只有在编译的时候才能检查出,程序在哪一方面有错误,它会把这个错误的举措,由程序运行的部分变成程序编译的部分,这就是新特性的提出,所以本质上枚举跟多例是相似的,但是枚举要比多例设计更加靠前一些。

 

02.Values ()方法获取所有的枚举对象

 

2.1获取所有的枚举对象


在进行枚举处理的时候,还可以利用 Values () 方法获取所有的枚举对象进行输出。

(1)范例:获取所有的枚举对象

Enum Color {  // 枚举类
RED ,GREEN ,BLUE  ;  // 实例化对象
}
Public class JavaDemo { 
public static void main (String args [] ) {
For ( Color c: Color.values() ) { 
System.out.println(c) ;
      }
   }
}

 

image.png

 

2.2对象数组


如果此时同样的功能需要通过多例设计来解决,就需要使用对象数组。从 JDK 1.5 追加了枚举结构之后,就可以在 Switch 之中进行枚举项的判断。

(1)范例:观察枚举与 Switch

 

Enum Color {  // 枚举类
RED ,GREEN ,BLUE;// 实例化对象
}
public class JavaDemo {
public static void main (string args [] ) {
Color c = Color.RED ;
switch(c)  {  // 直接支持枚举
case RED :
System.out.println("红色") ;
Break;
Case GREEN :
System.out.println("绿色") ;
Break ;
case BLUE : 
System.out.println("蓝色") ;
break ;
        }
   }

image.png

(2) 总结

多例上是无法实现这种与 Switch 直接连接的,多例要想实现它就需要编写大量的 If 判断。但是综合来讲枚举虽然功能本质上跟多例是一致的,但是会感觉它的设计会比多例结构更好,对枚举应该有冷静的认识,如果你已经习惯用枚举开发,可以继续使用。


如果你不习惯用枚举,可以选择不去使用,没有明确的要求,因为 Java 前十年是没有枚举的,不过由于 JDK 1.5 出现的比较早,现在很多的程序位上已经大量采用了枚举这一概念。

相关文章
|
C语言 C++
C/C++ 自定义头文件,及头文件结构详解
还是从"stdio.h"说起,这是C语言中内置的标准库,也就是说,头文件很多时候其实就是一个“库”,类似于代码的仓库,也就是说将某些具有特定功能的常量、宏、函数等归为一个大类,然后放进这个“仓库”,就像stdio.h就是一个标准输入/输出的头文件
384 1
|
Shell Linux C语言
【Shell 命令集合 磁盘管理 】Linux 以树状图列出目录的内容 tree命令使用指南
【Shell 命令集合 磁盘管理 】Linux 以树状图列出目录的内容 tree命令使用指南
507 0
|
编解码 算法 数据处理
基于八叉树的空间划分及搜索操作
基于八叉树的空间划分及搜索操作
基于八叉树的空间划分及搜索操作
|
6月前
|
人工智能 API 数据库
MCP Server 开发实战 | 大模型无缝对接 Grafana
以 AI 世界的“USB-C”标准接口——MCP(Model Context Protocol)为例,演示如何通过 MCP Server 实现大模型与阿里云 Grafana 服务的无缝对接,让智能交互更加高效、直观。
1944 116
|
10月前
|
C语言
【C语言】标识符大通关!
标识符是编程语言中的基本元素之一。在C语言中,标识符用于命名变量、函数、类型、标签等。正确理解和使用标识符对于编写可读性强、易维护的代码至关重要。
332 2
【C语言】标识符大通关!
|
4月前
|
机器学习/深度学习 自然语言处理 监控
ms-swift 部分命令行参数说明
本资源介绍了机器学习训练中的关键参数设置及其影响,包括训练轮数、批量大小、学习率、梯度累积、模型微调等,并提供了针对不同任务和硬件配置的推荐值,帮助提升模型训练效率与性能。
353 4
|
12月前
|
Java 编译器 测试技术
全面理解Maven Compiler Plugin-Maven编译插件
【10月更文挑战第16天】
2591 1
|
11月前
|
前端开发 开发者
深入探索 Flutter 鸿蒙版的画笔使用与高级自定义动画
本文深入探讨了 Flutter 中的绘图功能,重点介绍了 CustomPainter 和 Canvas 的使用方法。通过示例代码,详细讲解了如何绘制自定义图形、设置 Paint 对象的属性以及实现高级自定义动画。内容涵盖基本绘图、动画基础、渐变动画和路径动画,帮助读者掌握 Flutter 绘图与动画的核心技巧。
258 1
|
监控 持续交付 Docker
使用Docker进行微服务架构的最佳实践
【5月更文挑战第10天】本文探讨了使用Docker实施微服务架构的最佳实践。首先,理解微服务架构是拆分小型独立服务的模式,借助Docker实现快速部署、高可移植性和环境一致性。Docker的优势在于服务扩展、容器编排、自动化构建与部署。最佳实践包括:定义清晰服务边界,使用Dockerfile和Docker Compose自动化构建,利用Docker Swarm或Kubernetes编排,实施服务发现和负载均衡,监控与日志记录,以及持续集成和持续部署。Docker虽重要,但需与其他技术结合以确保系统整体稳定性。
|
存储 负载均衡 网络协议
ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
【4月更文挑战第10天】ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
201 1