枚举

一,枚举类型的描述

       枚举类型是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());

结果:

      

原文地址:https://www.cnblogs.com/ljl150/p/11789413.html