枚举定义
枚举就是一个类里定义几个静态变量,每个变量都是这个类的实例。
枚举不可以产生实例对象 new 原因:自定义的枚举,他都是继承 Enum.,构造函数默认为私有的。
面试问题
为什么枚举不能通过反射来创建一个实例?
因为newInstance方法的源码中排除了枚举类。
enum Size{
SMALL("S"),MIDIUM("M"),LARGE("L"),EXTRA_LARGE("XL");
private String abbreviation;
private Size(String abbreviation){
this.abbreviation = abbreviation;
}
public String getAbbreviation(){
return abbreviation;
}
}
public class TestDemo4 {
public static void main(String[] args) {
Size size1 = Size.SMALL;
Size size2 = Size.LARGE;
System.out.println(size1.getAbbreviation());
System.out.println(size1.compareTo(Size.LARGE));//枚举值的比较
System.out.println(size1.compareTo(size2));
System.out.println(size2.ordinal());//得到枚举值的下标
System.out.println(size2.toString());//返回枚举常量名
System.out.println(Size.valueOf("EXTRA_LARGE"));
for (Size s:Size.values() //values把枚举的实例,都变成一个数组 这个方法是由编译器自己生成的
//静态方法
) {
System.out.println(s);
}
Size[] size = Size.values();
for (int i = 0; i < size.length; i++) {
System.out.println(size[i]);
}
}
}