枚举
一,枚举类型的描述
枚举类型是Java 5中新增的一部分,一般一个地方要取固定个数的值的时候,可以将其定义成枚举类型。因为对于枚举类型来说,除了刚开始定义的那几个对象(自己给出对象的名字,JVM生成对象),之后是不能在通过new产生对象了,这是因为在定义枚举时,其构造函数被默认设置之成私有的。即使使用反射,调用Constructor的 newInstance()方法,也无法产生对象,因为newInstance()方法也在其方法体中对枚举类型进行判断设置。所以后面只能通过 (枚举类型.对象名)获取其在开始定义的那几个固定的对象。
创建一个枚举类的时候默认继承Enum,所以无法再继承其他的类,但是可以实现多个接口,且编译器编译的时候会将枚举类标记为final所以也不会被继承。
注意在枚举类型中定义对象时,必须要放在最前面,否则编译出错,当只定义了对象没有定义变量和方法时,最后一个对象后面的分号是可以省略的。
代码举例:
1 enum Way{ //与类相似,类是用class定义,枚举是用enum定义 2 UP(10),DOWN,RIGHT,LIFT; //定义对象,注:必须要大写 3 private int data; //定义变量 4 private Way(){ //默认构造函数 注:枚举类型的构造函数默认是私有的 5 System.out.println("构造函数"); 6 } 7 private Way(int data){ //带参构造函数 注:枚举类型的构造函数默认是私有的 8 this.data=data; 9 } 10 public void show(){ //方法 11 System.out.println( this.data); 12 } 13 } 14 public class 枚举 { 15 public static void main(String[] args) throws Exception { 16 Way way1=Way.UP; //不能new对象,只能通过 枚举类型. 调用开始定义的那几个固定的对象 17 way1.show(); 18 } 19 }
二,枚举类常用的方法
- name:获取某个实例声明时的名称
- ordinal:获取某个实例在枚举类中声明的序号(从0开始)
- compareTo:通过实例在枚举类中的声明顺序进行比较大小(默认实现了Comparable接口)
- getDeclaringClass:返回某个实例的Class对象
- valueOf:Enum中的方法需要传两个参数一个是枚举类的Class对象一个是实例的名称,返回该实例对象
- equal:比较是否是同一个对象,即使用‘==’比较
- toString:返回实例的名称
1 System.out.println(way1.name()); 2 System.out.println(way1.ordinal()); //得到声明顺序 3 System.out.println(way2.ordinal()); 4 System.out.println(way1.compareTo(way2)); //比较的是声明顺序,即下标 5 System.out.println(way1.getDeclaringClass()); 6 System.out.println(way1.equals(way1)); //比较的是两个对象是否是同一个 7 System.out.println(way1.toString());
结果: