枚举Enum: 是一种特殊形式的java类,其中声明的每个枚举类值代表枚举类的一个实例对象,在声明枚举类是也可声明属性、方法、和构造器,但是构造器必须为私有的,也可实现接口,默认继承于Enum抽象类,不允许用户自定义父类。
JDK1.5新增关键字enum定义枚举类,都是
Enum<E>
的子类,继承Enum类中的所有方法,用于表示取值是否范围中的之一,可以吧相关常量分配到一个类型中,实质就是某种类型清单。JDK1.6中枚举类型可以用于switch结构体中
测试案例
public enum Season{
/、定义枚举类型需要用关键字enum,不允许使用继承的extends关键字,因为所有的枚举类型都继承于Enum,但是可以使用implements实现接口
春天、夏天、秋天、冬天;//每一个就是一个枚举值,允许获取的数据值,没有在这里出现的则是不允许使用的值。
public static void main(String[] args){
Season s = Season.春天;
System,out.println(s.name());//获取对应的名称,例如MALE
System.out.println(s.ordinal());//获取常量对应的序号,默认从0开始
}
}
枚举类相关的方法
ordinal()
:int 获取索引号,索引号默认从0开始name()/toString()
:String获取常量名values()
:静态方法返回一个包含全部枚举值得数组valueOf()
:valueOf(枚举类.class,“字符串”)
public enum Season{
春天,夏天,秋天,冬天;
}
public class Test{
public static void main(String[] args){
Season obj1 = Season.春天;
System.out.println("序号:"+obj1.ordinal());
System.out.println("常量名称:"+obj1.name());
Season[] choices = Season.values();//获取所有的预定义的常量对象
for(Season tmp:choices)
System.out.println(tmp);
//将字符串类型转换为指定的枚举类型
String ss = "夏天";
Season obj2 = Season.valueOf(ss);//将字符串类型转换成指定的枚举类型
System.out.println(obj2.ordinal());
}
}
枚举类型带参构造器
public enum color{
RED("红色",1),GREEN("绿色",2);
private String name;
private int index;
//枚举类只可以拥有私有的构造方法,在你定义枚举类的构造方法时,即使没有使用任何修饰符,它仍然是私有的,所以枚举类不能被外部类实例化,构造器是能在狗仔枚举时调用,类外不可访问
private Color(String name,int index){
//自定义构造器,则系统不再提供无参构造器,所以对应的枚举值必须符合构造器的规则
this.name = name;
this.index = index;
}
}
枚举类型普通方法
public enum Color{
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLO("黄色",4);
private String name;
private int index;
private Color(String name,int index){
this.name = name;
this.index = index;
}
public static String getName(int index){
for(Color c:Color.values()){
if(c.getIndex() == index)
return c.name;
}
}
return null;
}