通过观看张老师对枚举类的讲解,我字再查了一些课外书,归纳了以下一些关于枚举类的使用
,总的说来,枚举类主要用以限定一个类产生对象的个数。
枚举类中自己定义了一些方法,
比如
compareTo(E o)对象比较
equals(E o)判断是否相等
name() 获得枚举的名称
ordinal()返回枚举常量的序数
valueOf()方法找到一个枚举对象
在Enum类中已经实现了comparable接口,因此当你往一个集合类(如TreeSet)中加入枚举的对象后再进行输出,可以发现,他可能和你加入时的顺序不同了.
jdk1.5之后,类集中的EnumSet和EnumMap支持了枚举的操作,枚举可以限定自己的对象个数,但是在输出时,枚举采用的是values()方法将全部的对象输出,这样的方式貌似不是很灵活。有了类集的支持,就可以把枚举的中的对象移到类集中,再通过类集的get()方法进行有选择性的输入,这样会显得更加灵活。
package cn.yangtao.enumdemo;
public class EnumTest {
/**
* @param args
*/
/**
* 最普通的枚举
*/
public enum ColorSelect{
red,green,yellow,blue;
}
/**
* 枚举也可以像一般的类一样添加方法和属性,你可以为它添加静态或者非静态
* 的属性或方法,就像在一般类中做的那样,通过枚举的对象元素来调用
* @param args
*/
public enum Season{
//枚举列表必须写在最前面,否则编译出错
winter,spring,summer,fall;
private final static String location="Phoenix";
public static Season getBest(){
if(location.equals("Phoenix")){
return winter;
}
else{
return summer;
}
}
/*
* 还可以给枚举添加构造方法
*
*/
}
public enum Temp{
/*
* 通过括号赋值,而且必须有带参构造器和一属性跟方法
* 否则编译出错
* 赋值必须都赋值或都不赋值
* 如果不赋值则不能写构造器,赋值编译也出错
*/
absoluteZero(-459),freezing(32),boiling(212),paperburns(451);
private final int value;
public int getValue(){
return value;
}
//构造器默认也只能是private,从而保证构造函数只能在内部使用
Temp(int value){
this.value=value;
}
}
/*
* 通过匿名类来实现抽象方法
* 每一个对象可以看成是hello的子类的对象
*/
public enum Hello{
zhangsan{
public void say(){
System.out.println("我是张三");
}
},
wangwu{
public void say(){
System.out.println("我是王五");
}
},
lisi{
public void say(){
System.out.println("我是李四");
}
};
public abstract void say();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 枚举类型是一种类型,用于定义变量,以限制变量的赋值
* 赋值时通过“枚举名.值”来取得相关枚举中的值
*/
ColorSelect m=ColorSelect.blue;
switch(m){
/*
* 枚举重写了ToString(),所以枚举变量的值是不带前缀的
* 所以m为blue而非ColorSelect.blue
*/
case blue:
System.out.println("蓝颜色");
break;
case red:
System.out.println("红颜色");
break;
case green:
System.out.println("绿颜色");
break;
case yellow:
System.out.println("黄颜色");
break;
default :
System.out.println("输入有误");
}
//通过Season枚举类的对象winter调用其中的方法
System.out.println(Season.winter.getBest());
//通过Temp枚举类的对象freezing调用方法
System.out.println(Temp.freezing.getValue());
//通过hello枚举类的对象zhangsan来调用方法
Hello.zhangsan.say();
}
}