JAVASE每日加强一点点——正确的姿势理解枚举类

53 阅读2分钟

正确理解枚举类型

首先给大家看一段代码

public class Test {
    public static final int SPRING =1 ;
    public static final int SUMMER =2 ;
    public static final int AUTUMN =3 ;
    public static final int WINTER =4 ;
    public static void main(String[] args) {
        int season = new Scanner(System.in).nextInt();
        switch (season){
            case SPRING:
                System.out.println("春天");
                break;
            case SUMMER:
                System.out.println("夏天");
                break;
            case AUTUMN:
                System.out.println("秋天");
                break;
            case WINTER:
                System.out.println("冬天");
                break;
        }
    }
}

此段代码中我们想要用户输入之四个数据中的某一个,根据用户的输入判断是哪个季节,可是现在有一个问题就是用户可以随便输入数字例如10、45、23......等等等

此时我们有没有办法只能输入四个值呢。

枚举类型的出现就解决了这个问题:

什么是枚举?(百度百科)

在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。 [1] 是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。

枚举的应用

所以我接下来定义一个季节的枚举类:

enum Season{
    SPRING,SUMMER,AUTUMN,WINTER;
}

改造一下main方法:

 public static void main(String[] args) {
        Season season = Season.SPRING;
        switch (season){
            case SPRING:
                System.out.println("春天");
                break;
            case SUMMER:
                System.out.println("夏天");
                break;
            case AUTUMN:
                System.out.println("秋天");
                break;
            case WINTER:
                System.out.println("冬天");
                break;
        }
    }

那这样就解决问题了吗?看下图:

image.png

我们发现在用Season调用的时候只有SPRING,SUMMER,AUTUMN,WINTER;这几个值。

这样首先控制用户传递的时候不会传无限个值,而且增加了代码的可读性。

枚举的成员的特点:

image.png

在图片中我们可以看出:

枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。

总结

说一千道一万到底什么是枚举呢,什么时候能应用呢? 一个类中的对象,如果个数固定一一列举的方式描述出来 步骤:

  1. 定义一个枚举类Enum类型的
  2. 枚举类是一个特殊类它默认继承一个父类Enum,定义的枚举类不支持继承包括Object类
  3. 但可以实现多接口
  4. 枚举类通常将对象一一列举即可,若描述其他属性需指定构造方法
  5. 枚举类的构造方法必须为private修饰
  6. 枚举类中若定义其他属性或者其他方法,注意将枚举对象放在首行