正确理解枚举类型
首先给大家看一段代码
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;
}
}
那这样就解决问题了吗?看下图:
我们发现在用Season调用的时候只有SPRING,SUMMER,AUTUMN,WINTER;这几个值。
这样首先控制用户传递的时候不会传无限个值,而且增加了代码的可读性。
枚举的成员的特点:
在图片中我们可以看出:
枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。
总结
说一千道一万到底什么是枚举呢,什么时候能应用呢? 一个类中的对象,如果个数固定一一列举的方式描述出来 步骤:
- 定义一个枚举类Enum类型的
- 枚举类是一个特殊类它默认继承一个父类Enum,定义的枚举类不支持继承包括Object类
- 但可以实现多接口
- 枚举类通常将对象一一列举即可,若描述其他属性需指定构造方法
- 枚举类的构造方法必须为private修饰
- 枚举类中若定义其他属性或者其他方法,注意将枚举对象放在首行