------- android培训、java培训、期待与您交流! ----------
通过张孝祥老师的详细讲解,和自己的总结,本人对于枚举有了一定的初步认识.
一,为什么需要枚举
一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决
二, 创建枚举格式:
enum 枚举类型名称 {
枚举对象1名称,
枚举对象2名称,
… ,
枚举对象n名称;
}
三,实例(简单)
public classEmployee {
private int id;
private String name;
//最早
private int role1;
//早些
private Role2 role2;
//现在,枚举
private Role3 role3;
public void demo1(){
Employeeemp=newEmployee();
emp.id=1;
emp.name="张三";
//emp.role1=Role1.BOSS;//可读性还不错,但是这种写法不好.别人调用方法时可以任意传值
//emp.role2=Role2.Boss;//可读性没问题,构造函数私有
emp.role3=Role3.BOSS;
}
}
//定义一个类,在这个类中定义一些静态的常量,代表某一些值
class Role1{
public static final int BOSS=1;
public static final int MANAGER=2;
public static final int HR=3;
public static final int WOEKER=4;
}
//静态实例对象
class Role2{
private Role2(){}
public static final Role2 Boss= new Role2();
public static final Role2 MANAGER= new Role2();
public static final Role2 HR= new Role2();
public static final Role2 WOEKER= new Role2();
}
//写法简单,与写法二等价
enum Role3{
BOSS,MANAGER,HR,WORKER;
}
四,枚举的特性
枚举类具有如下特性:
枚举类也是一种特殊形式的Java类。
枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解,为确保取值的范围固定,而别人不能创建行的对象)。
枚举类也可以实现接口、或继承抽象类。
JDK5中扩展了swith语句,它除了可以接收int,byte, char, short外,还可以接收一个枚举类型。
若枚举类只有一个枚举值,则可以当作单态设计模式使用
五,枚举中带参数的构造方法
//带参数的构造方法
enum Color{
RED("红色"),BIUE("蓝色"),BLACK("黑色");
private Color(String name){//构造方法必须在实例对象下面
System.out.println(name);
}
}
注意:如果有抽象方法,需要在实例上把抽象方法实现.
六,枚举的API
Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法。常用方法:
name() 返回枚举对象名称
ordinal() 返回枚举对象下标
valueof(Class enumClass, String name) 转换枚举对象
自定义的枚举类在编译阶段自动生成下面方法
valueof(String name) 转换枚举对象
values() 获得所有枚举对象数组