一、枚举格式
JDK1.5引入了枚举类型。枚举类型的定义包括枚举声明和枚举体。格式如下:
enum 枚举名 {
枚举体(常量列表)
}
二、用法一:常量
enum Direction{
FRONT,BEHIND,LEFT,RIGHT;
}
三、用法二:switch
enum Season{
SPRING,SUMMER,AUTUMN,WINTER;
}
public class Temp {
public static void main(String[] args) {
int tag = new Random().nextInt(4);
Season season = Season.values()[tag];
switch (season) {
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
}
}
}
四、用法三:向枚举中添加成员
enum Season{
SPRING("春天"),SUMMER("夏天"),AUTUMN("秋天"),WINTER("冬天");
//成员变量
private String name;
public static String character;
//构造方法
private Season(String name) {
this.name = name;
}
//普通方法
public void sayHello() {
System.out.println("我是"+this.name);
}
public static void show() {
System.out.println(character);
}
}
enum Season{
SPRING {
@Override
void test() {
}
},
SUMMER {
@Override
void test() {
}
},
AUTUMN {
@Override
void test() {
}
},
WINTER {
@Override
void test() {
}
};
//抽象方法
abstract void test();
}
五、用法四:覆盖枚举的方法
下面给出一个toString()方法覆盖的例子。
enum Season{
SPRING,SUMMER,AUTUMN,WINTER;
String msg = "跑调大叔";
@Override
public String toString() {
return msg;
}
}
六、用法五:实现接口
interface TestDemo{
public void sayHello();
public void print();
}
enum Season implements TestDemo{
SPRING,SUMMER,AUTUMN,WINTER;
//实现接口中的方法
@Override
public void sayHello() {
}
//实现接口中的方法
@Override
public void print() {
}
}
七、注意事项
- 定义枚举类要用关键字enum;
- 所有枚举类都是Enum的子类。他们默认都是public static final修饰的;
- 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略;
- 枚举类可以有构造器,但必须是private的,它默认的也是private的。如果有构造器,那么枚举项的用法比较特殊:枚举项("");
- 枚举类也可以有抽象方法,但是所有项必须重写该方法;
- 当你需要定义一组常量时,可以使用枚举类型。
八、补充常用方法:
name() :返回枚举的名称
ordinal() :枚举的下标,下标从0开始
valueOf(Class<T> enumType, String name) :获取枚举的对象
还有两个方法,都是这两个方法不在api里面,编译的时候生成两个方法
valueof(String name): 获取枚举对象
values(): 获得所有枚举对象数组
例1:已知枚举对象,获取枚举名称和下标
public static void test01(){
Color c = Color.YELLOW;
String name = c.name();
int index = c.ordinal();
System.out.println(name+" "+index);
}
例2:已知枚举名称,获取枚举对象和下标
public static void test02(){
String name = "GREEN";
Color c = Color.valueOf(name);
int index = c.ordinal();
System.out.println(name+" "+index);
}
例3:已知枚举下标,获取枚举对象和名称
public static void test03(){
int index = 1;
Color[] cs = Color.values();
Color c = cs[index];
String name = c.name();
System.out.println(name+" "+index);
}
Java新手,如有错误,欢迎指正!