Java基础15:深入理解Java枚举类

Java基础15:深入理解Java枚举类

(本文参考了https://blog.csdn.net/a724888/article/details/80173457 )
  枚举(enum)类型是Java 5新增的特性,存放在 java.lang 包中,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。

引入枚举类

  在程序设计中,有时会用到由若干个有限数据元素组成的集合,如一周内的星期一到星期日七个数据元素组成的集合,由三种颜色红、黄、绿组成的集合,一个工作班组内十个职工组成的集合等等,程序中某个变量取值仅限于集合中的元素。此时,可将这些数据集合定义为枚举类型。
  因此,枚举类型是某类数据可能取值的集合,如一周内星期可能取值的集合为:
  { Sun,Mon,Tue,Wed,Thu,Fri,Sat}
  该集合可定义为描述星期的枚举类型,该枚举类型共有七个元素,因而用枚举类型定义的枚举变量只能取集合中的某一元素值。由于枚举类型是导出数据类型,因此,必须先定义枚举类型,然后再用枚举类型定义枚举型变量。

enum <枚举类型名> 
  {
    <枚举元素表> };
  
  其中:关键词enum表示定义的是枚举类型,枚举类型名由标识符组成,而枚举元素表由枚举元素或枚举常量组成。例如: 
  
enum weekdays 
  {
    Sun,Mon,Tue,Wed,Thu,Fri,Sat };
  定义了一个名为 weekdays的枚举类型,它包含七个元素:Sun、Mon、Tue、Wed、Thu、Fri、Sat。

  在编译器编译程序时,给枚举类型中的每一个元素指定一个整型常量值(也称为序号值)。若枚举类型定义中没有指定元素的整型常量值,则整型常量值从0开始依次递增,因此,weekdays枚举类型的七个元素Sun、Mon、Tue、Wed、Thu、Fri、Sat对应的整型常量值分别为0、1、2、3、4、5、6。
  注意:在定义枚举类型时,也可指定元素对应的整型常量值。

例如,描述逻辑值集合{
   TRUE、FALSE}的枚举类型boolean可定义如下:
enum boolean 
  {
    TRUE=1 ,FALSE=0 };
该定义规定:TRUE的值为1,而FALSE的值为0。
  
而描述颜色集合{
   red,blue,green,black,white,yellow}的枚举类型colors可定义如下:
enum colors 
  {
   red=5,blue=1,green,black,white,yellow};
  该定义规定red为5 ,blue为1,其后元素值从2 开始递增加1。green、black、white、yellow的值依次为2345

  此时,整数5将用于表示二种颜色red与yellow。通常两个不同元素取相同的整数值是没有意义的。枚举类型的定义只是定义了一个新的数据类型,只有用枚举类型定义枚举变量才能使用这种数据类型。

枚举语法

1.1 枚举类与普通类的相同点

enum 与 class、interface 具有相同地位;
可以继承多个接口;
可以拥有构造器、成员方法、成员变量;

1.2 枚举类与普通类不同之处

1、默认继承 java.lang.Enum 类,所以不能继承其他父类;其中 java.lang.Enum 类实现了 java.lang.Serializable 和 java.lang.Comparable 接口;

2、使用 enum 定义,默认使用 final 修饰,因此不能派生子类

3、构造器默认使用 private 修饰,且只能使用 private 修饰;

4、枚举类所有实例必须在第一行给出,默认添加 public static final 修饰,否则无法产生实例

枚举类的具体使用

这部分内容参考https://blog.csdn.net/qq_27093465/article/details/52180865

1、常量

在JDK1.5 之前,我们定义常量都是: public static final… 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

public enum Color {
     
  RED, GREEN, BLANK, YELLOW  
} 

2、switch

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

enum Signal {
     
    GREEN, YELLOW, RED  
}  
public class TrafficLight {
     
    Signal color = Signal.RED;  
    public void change() {
     
        switch (color) {
     
        case RED:  
            color = Signal.GREEN;  
            break;  
        case YELLOW:  
            color = Signal.RED;  
            break;  
        case GREEN:  
            color = Signal.YELLOW;  
            break;  
        }  
    }  
}  

3、向枚举中添加新方法

如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值