一、前言
本篇博客是对JDK1.5的新特性枚举的一波小小的总结,主要是昨天在看一部分面试题的时候,遇到了枚举类型的题目,发现自己有许多细节还需要加强,做起来都模棱两可,是时候总结一波了。
二、源自一道面试题
不多bb,直接开门见山,我遇到这样一道也许很简单的题目:
enum AccountType
{
SAVING, FIXED, CURRENT;
private AccountType()
{
System.out.println(“It is a account type”);
}
}
class EnumOne
{
public static void main(String[]args)
{
System.out.println(AccountType.FIXED);
}
}
问打印的结果是啥?正确答案如下:
It is a account type
It is a account type
It is a account type
FIXED
至于结果为啥是这个,且看我慢慢总结。
三、枚举的由来
存在即合理。
我贼喜欢这句圣经,每次我一解释不了它为什么出现的时候,就不自觉地用上这句话。
枚举一定有他存在的价值,在一些时候,我们需要定义一个类,这个类中的对象是有限且固定的,比如我们一年有四个季节,春夏秋冬。
在枚举被支持之前,我们该如何定义这个Season类呢?可能会像下面这样:
public class Season {
//private修饰构造器,无法随意创建对象
private Season(){}
//final修饰提供的对象在类外不能改变
public static final Season SPRING = new Season();
public static final Season SUMMER = new Season();
public static final Season AUTUMN = new Season();
public static final Season WINTER = new Season();
}
在定义上,这个Season类可以完成我们的预期,它们各自代表一个实例,且不能被改变,外部也不能随便创建实例。
但,通过自定义类实现枚举的效果有个显著的问题:代码量非常大。
于是,JDK1.5,枚举类应运而生。<