枚举使用enum关键字,(枚举的实例是常量,因此按照命名规范它们都得大写,如果有多个单词用下划线将他们隔开),枚举属于一种类,它有自己的方法,枚举类型可以作为swatch语句的参数(JDK1.5以后支持的),枚举不可以产生实例对象(所有自定义的枚举都是继承Enum(一个抽象类),构造函数默认为私有的);
swatch语句的参数只能是byte、short、char、int类型以及他们的包装类和String、枚举;
枚举成员默认都是public static final的
以下是枚举类中,比较常用的方法:
名字 | 作用 |
---|---|
toString() | 输出实例名字 |
ordinal() | 用来表示特定的枚举类常量声明顺序 |
static values() | 按照枚举类常量声明顺序,产生由这些常量值构成的数组,源码中并没有这个方法,编译器给这个枚举类添加的特性 |
1、枚举为什么不可以newInstance得到一个实例?
枚举不可以, 在源码中,Constructo中的newInstance()不允许通过反射创造一个枚举对象(在用反射去获得枚举类的构造函数创建对象时,它所需要的参数会比你自定义的枚举类构造函数参数多出来两个,这是因为继承(构造自己时要构造基类的)):
抛出IllegalArgumentException异常,也因为如此用枚举实现单例模式很安全。
以下是一个枚举类的小练习题的代码:
/**
* @ClassName TestDemo5
* @Description 枚举
* @Author lzq
* @Date 2018/11/14 17:14
* @Version 1.0
**/
/**
* 纸币
*/
enum Banknotes {
ONE,FIVE,TEN,TWENTY,FIFTY,ONE_HUNDRED; //纸币面额 1、5、10、20、50、100
}
class Character {
Banknotes banknotes;
public Character(Banknotes banknotes) {
this.banknotes = banknotes;
}
public void describe(){
switch (banknotes) {
case ONE:
System.out.println("is ONE 正面主景是瑶族与侗族人物头像;背面主景是雄伟壮观的万里长城");
break;
case FIVE:
System.out.println("is FIVE 正面主景是藏族与回族人物头像;" +
"背面主景是长江三峡中最长的一段----巫峡");
break;
case TEN:
System.out.println("is TEN 主景为主席头像,背面主景为长江三峡图案,");
break;
case TWENTY:
System.out.println("is TWENTY 票面主景为主席头像 票面背面主景为桂林山水图案");
break;
case FIFTY:
System.out.println("is FIFTY 正面主景为主席头像,背面主景为布达拉宫图案,");
break;
default:
System.out.println("is ONE_HUNDRED正面主景是革命领袖主席、总理、" +
"刘、朱四人威武庄严的侧面头像;" +
"背面主景是老革命根据地井冈山主峰----五指峰");
}
}
}
public class TestDemo5 {
public static void main(String[] args) {
Banknotes banknotes = Banknotes.ONE_HUNDRED;
System.out.println(banknotes);
for(Banknotes banknotes1 : Banknotes.values()) {
System.out.println(banknotes1+" "+banknotes1.ordinal());
}
Character c1 = new Character(Banknotes.ONE_HUNDRED),
c2 = new Character(Banknotes.ONE),
c3 = new Character(Banknotes.FIFTY);
c1.describe();
c2.describe();
c3.describe();
}
}
ONE_HUNDRED
ONE 0
FIVE 1
TEN 2
TWENTY 3
FIFTY 4
ONE_HUNDRED 5
is ONE_HUNDRED正面主景是革命领袖主席、总理、刘、朱四人威武庄严的侧面头像;背面主景是老革命根据地井冈山主峰----五指峰
is ONE 正面主景是瑶族与侗族人物头像;背面主景是雄伟壮观的万里长城
is FIFTY 正面主景为主席头像,背面主景为布达拉宫图案,