-------
android培训、
java培训、期待与您交流! ----------
编译后成字节码文件,查看一下
枚举调用:
所有枚举类型都继承自Enum,其方法也可被使用
枚举类型是JDK5.0的新特性,也是一个特殊的类
现在定义个枚举
public enum Color{
RED,BLUE,BLACK,YELLOW,GREEN
}
编译后成字节码文件,查看一下
- final enum hr.test.Color {
- // 所有的枚举值都是类静态常量
- public static final enum hr.test.Color RED;
- public static final enum hr.test.Color BLUE;
- public static final enum hr.test.Color BLACK;
- public static final enum hr.test.Color YELLOW;
- public static final enum hr.test.Color GREEN;
- private static final synthetic hr.test.Color[] ENUM$VALUES;
- // 初始化过程,对枚举类的所有枚举值对象进行第一次初始化
- static {
- 0 new hr.test.Color [1]
- 3 dup
- 4 ldc <String "RED"> [16]
- 6 iconst_0
- 7 invokespecial hr.test.Color(java.lang.String, int) [17]
- 10 putstatic hr.test.Color.RED : hr.test.Color [21]
- ......... 枚举对象BLUE等与上同
- 102 return
- };
- // 私有构造器,外部不可能动态创建一个枚举类对象(也就是不可能动态创建一个枚举值)。
- private Color(java.lang.String arg0, int arg1){
- // 调用父类Enum的受保护构造器创建一个枚举对象
- 3 invokespecial java.lang.Enum(java.lang.String, int) [38]
- };
- public static hr.test.Color[] values();
- // 实现Enum类的抽象方法
- public static hr.test.Color valueOf(java.lang.String arg0);
- }
从字节码文件中可以得知:
枚举的构造方法必须是私有的,不对外提供构造,构造器只是在构造枚举的时候被调用;
默认是调用无参的构造器,也可提供有参的构造器
枚举值必须在构造器的前面,且必须有分号结束;
所有枚举值都是静态常量,且是Color的对象;
枚举类是final,是不可被继承的
枚举内部调用构造器,下面是带参数的构造器
- enum Color{
- RED(255,0,0),BLUE(0,0,255),BLACK(0,0,0),YELLOW(255,255,0),GREEN(0,255,0);
- //构造枚举值,比如RED(255,0,0)
- private Color(int rv,int gv,int bv){
- this.redValue=rv;
- this.greenValue=gv;
- this.blueValue=bv;
- }
- public String toString(){ //覆盖了父类Enum的toString()
- return super.toString()+"("+redValue+","+greenValue+","+blueValue+")";
- }
- private int redValue; //自定义数据域,private为了封装。
- private int greenValue;
- private int blueValue;
- }
枚举就是一个特殊的类,那么枚举中也可以有方法,用交通灯演示,红灯 下一个就是 绿灯,绿灯下一个是黄灯,黄灯下一个就是红灯(内部类)
enum LampLight{
RED{
@Override
public LampLight next() {
return GREEN;
}
},YELLOW{
@Override
public LampLight next() {
return RED;
}
},GREEN{
@Override
public LampLight next() {
return YELLOW;
}
};
public abstract LampLight next();//抽象方法,让枚举值各自实现
}
枚举调用:
public class Test{
public static void main(String[] args){
Color c= Color.RED;
System.out.println(c);
LampLight l = LampLight.RED;
System.out.println( l.next()); //输出 GREEN
}
}
所有枚举类型都继承自Enum,其方法也可被使用
1、
ordinal()方法: 返回枚举值在枚举中的顺序,这个根据枚举值声明的顺序而定
Color.RED.ordinal(); //返回结果:0
Color.
GREEN
.ordinal(); //返回结果:4
2、c
ompareTo()方法:枚举实现了比较器接口,可以比较对象和指定对象的顺序,前提是两个枚举值必须是同个枚举类型
3、
values()方法:静态方法,返回一个包含枚举值的数组
4、
toString()方法:返回枚举常量的名称
5.、
valueOf()方法:这个和toString()对应,根据指定名称返回枚举类型的枚举常量
6、
equals()方法:比较两个枚举对象的引用,这个还是使用object的方法
枚举在switch中的使用:
一般都是Color c = Color.RED;而在switch中比较特殊,不需要前面的枚举类型,直接是枚举值
switch( c){
case RED:
break;
default:
break;
}