来看一下java中新加入的枚举都有哪些特点:
package HeiMa;
import org.junit.Test;
public class Heima_01 {
@Test
//测试交通灯枚举
public void testLight(){
//比如当前是红灯,获取下一个灯
String nextLight = Light.GREEN.getNext();
System.out.println(nextLight);
Light2 nextLight2 = Light2.GREEN.getNext();
System.out.println(nextLight);
}
@Test
//简单的枚举测试
public void testWeekDay(){
WeekDay w = WeekDay.FRI;
System.out.println(w);
System.out.println(w.name());
System.out.println(w.ordinal());
System.out.println(w.toString());
System.out.println(w.valueOf("SUN").toString());
System.out.println(w.values().length);
}
}
/*
* 简单的枚举
* 用于规定某个类型的取值,只能为若干个固定值中的一个,否则编译出错
*
* 1. 私有的构造方法
* 2. 每个元素都是一个公有的静态成员变量
* 3. 可以有抽象方法或公有方法
*/
enum WeekDay{
SUN,MON,TUE,WED,THI,FRI,SAT;
//枚举的构造方法必须私有
private WeekDay(){}
private WeekDay(int day){}
}
/*
* 定义一个交通灯枚举,包含红灯、绿灯、黄灯,需要有获得下一个灯的方法;
* 如:红灯的下一个灯是绿灯,绿灯的下一个灯是黄灯
*/
enum Light{
//枚举的元素后边跟着的()中的内容,表明会调用private Light(String s){}构造方法
RED("GREEN"),GREEN("YELLOW"),YELLOW("RED");
private String s;
//这里参数String s,就是枚举元素的()中的内容
private Light(String s){
this.s = s;
}
public String getValue(){
return this.toString();
}
public String getNext(){
return this.s;
}
}
/*
* 交通灯枚举也可以这样定义
*/
enum Light2{
//枚举的元素后边用{}中的内容,实现定义的抽象方法
RED{
public Light2 getNext(){
return GREEN;
}
},
GREEN{
public Light2 getNext(){
return YELLOW;
}
},
YELLOW{
public Light2 getNext(){
return RED;
}
};
private Light2(){}
//这里定义一个抽象方法,用于获取下一个灯
public abstract Light2 getNext();
}