10. jvm之枚举
一. 枚举的概念
enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用。
二. 枚举的深度理解
1. 定义常量
enum Color{
WHITE,BLACK,RED
}
2. 使用方式
System.out.println(Color.BLACK);
3. Color的本质
System.out.println(Color.class);
//class com.kevin.Color
说明Color实际为一个class
4. Color的父类
System.out.println(Color.class.getSuperclass());
//class java.lang.Enum
说明定义的枚举类的父类均为java.lang.Enum类
5. Color.BLACK的本质
System.out.println(Color.BLACK.getClass());
//class com.kevin.Color
说明Color.BLACK实际为一个Color 类的class实例,使用该实例可以像正常的对象一样调用方法及属性.
6. 总结
枚举为一个继承自java.lang.Enum的只可在内部进行实例化的类;平时使用的每个变量(Color.RED)返回的均为该Color的一个实例,通过该实例可像正常的实例一样调用方法。
三. 枚举的方法
- Color.values():返回enum实例
- Color.RED.name():返回定义的变量名(具体应该为类的实例名)
- Color.RED.ordinal():返回该变量定义的次序,从0开始
- Color.valueOf(String name):通过传入名字,返回实例变量
四. 枚举的高级使用
1. 创建构造方法
enum Color{
WHITE("白色"),BLACK("黑色"),RED("红色");
public String desc ;
Color(String desc){
this.desc = desc;
}
}
- 即使构造方法为public,使用new Color("蓝色")对Color实例化时,也会报错"Error:(14, 28) java: 无法实例化枚举类型"
- 可使用Color.Red.desc获取desc属性,与普通类完全一致,而且desc不能声明为private
- 使用Color.values()遍历时,声明对象若是Enum,不能获取到desc属性,必须是Color
2. 枚举方法
在上面的例子中添加方法getDesc
public String getDesc(){
return this.desc;
}
- 可以像普通方法一样的调用该方法Color.RED.getDesc()
- 由于Color实际也是一个class,所以也可覆盖父类的方法
转自:
http://www.jb51.net/article/83104.htm
http://blog.csdn.net/wgw335363240/article/details/6359614