(超完整实用)枚举Enum入门到精通保姆级教学及注意事项

枚举大家都经常听说和使用,但我其实没有很细致从头到尾地去梳理一遍,希望对大家有所帮助😄

一、概念

枚举(Enum)是一种特殊的类,它包含了一组有限的、预定义的、命名的常量。在编程中,枚举用于表示固定数量的常量值(下文已对枚举和常量进行辨析,请看第四节),这些值可以是数字、字符串或其他类型。
通俗一点的举例就是,生理性别就是一个枚举类,严格来讲最多三个性别,女性、男性和中性(集合双重性征),是有限的、预定义且可命名的。
枚举使得代码更加清晰、易读,并且有助于减少因错误赋值或错误使用常量而导致的错误。

二、特点

  1. 有限性:枚举包含的值是有限的,且预定义。
  2. 命名性:每个枚举值都有一个唯一的名称,这使得代码更具可读性。
  3. 类型安全:枚举是强类型的,这意味着只能将枚举中定义的值赋给枚举变量。

三、语法

枚举的语法在不同的编程语言中可能有所不同,但大致上它们都遵循相似的模式。以下是一个通用的枚举语法示例:

enum EnumName {  
    value1,  
    value2,  
    value3,  
    // ...  
}

在上面的语法中,enum 是关键字,用于声明一个枚举类型。EnumName 是枚举类型的名称,而 value1、value2、value3 等则是该枚举类型的成员或值。

以 Java 为例,枚举的语法如下:

enum Color {  
    RED, GREEN, BLUE  
}

Color是一个枚举类型,而RED、GREEN和BLUE是该枚举类型的具体枚举值或成员。

  • 在 Java 中,枚举类型是一个特殊的类,它继承自 java.lang.Enum
    类。每个枚举成员都是这个类的一个实例,它们默认是public static final 的。

四、枚举与常量的区别

1、值的数量

  • 常量:通常是一个单独的值,表示一个固定的数据项。
  • 枚举:是一组命名的常量值,表示一组相关的固定数据项。

2、定义与使用

  • 常量:通常使用 final 关键字定义,并直接赋给一个具体的值(如 final int MAX_VALUE =100;)。常量可以在任何地方直接使用其值。
  • 枚举:通过 enum关键字定义,并列出所有可能的值。枚举值在定义之后作为类型安全的常量使用,通常用于限制变量的取值范围。

3、类型安全

  • 常量:由于其基本数据类型(如 int、String 等)的特性,使用常量时可能面临类型不匹配的风险。
  • 枚举:具有类型安全性,因为它们定义了自己的类型。尝试将错误的值赋给枚举类型的变量会导致编译错误。

4、可读性与维护性

  • 常量:如果只是简单的值,可能不够直观,尤其当值的含义不明确时。
  • 枚举:提供了描述性的名称,使得代码更加清晰易读。同时,如果需要添加或删除某个值,只需在枚举定义中修改,而无需搜索整个代码库。

5、扩展性:

  • 常量:通常只是简单的值,不包含方法或额外的逻辑。
  • 枚举:可以包含方法、构造器和其他字段,从而提供更为丰富的功能和行为。

五、枚举的优缺点

枚举既然是许多开发语言的常用手段,那必定有许多过人之处,但同时也有需要注意的地方。

优点

  1. 类型安全:枚举是一种强类型,这意味着枚举变量只能接受枚举类型中定义的值。这有助于防止将错误的值赋给变量,从而减少了错误的可能性。
  2. 提高代码可读性:枚举为常量提供了有意义的名字,使得代码更易于理解和维护。相比于使用魔法数字或字符串常量,枚举使得代码意图更加清晰。
  3. 易于扩展和维护:如果需要添加或删除枚举值,只需在枚举类型定义中进行修改,而无需在代码库中搜索和替换所有相关的常量值。
  4. 丰富的功能:许多编程语言支持在枚举中定义方法、构造器和字段,这使得枚举不仅仅是简单的值集合,还可以包含更复杂的逻辑和行为。
  5. 减少错误:使用枚举可以避免由于拼写错误或混淆而导致的常量值错误。枚举值的唯一性和类型检查有助于防止这类错误。

缺点

  1. 性能开销:相对于简单的常量,枚举可能需要更多的内存来存储,因为每个枚举值都是枚举类型的一个实例。此外,对枚举值的访问可能涉及额外的类型检查和方法调用,这可能会引入一些性能开销。然而,在大多数情况下,这种开销是可以接受的,并且在现代硬件上通常可以忽略不计。
  2. 语言支持差异:不同的编程语言对枚举的支持程度和语法可能有所不同。一些语言可能提供丰富的枚举功能,而另一些语言可能只提供基本的枚举支持。这可能导致在不同语言之间迁移代码时需要进行一些调整。
  3. 过度使用:有时,开发者可能会过度使用枚举,将不适合作为枚举的值也纳入其中。这可能导致枚举变得庞大而难以管理。因此,在使用枚举时,需要仔细考虑其适用性和必要性。

但总体瑕不掩瑜,枚举还是很实用且常见的,只是不能过度依赖~

注意事项

(又名踩坑记录)

  1. 建包名的时候要符合命名规范,如果取名为enum,就会出现无法建立java类的情况,如下图:

错误示范

  1. 使用enum关键字后,就不能再继承(extends)其他类了
    因为隐含继承的就是Enum类,JAVA是单继承制

  2. 枚举类还是可以同普通类一样可以实现(implements)接口。

==================================================================
以上就是关于枚举的全文啦,原创码字不易,希望大家多多支持,点赞、评论、收藏、关注我,谢谢大家😉

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值