简介
枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。
声明枚举
public enum SexEnum
{
male,female;
}
public enum Color
{
RED,BLUE,GREEN,BLACK;
}
枚举类
Java 中的每一个枚举都继承自 java.lang.Enum 类。当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例,这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。
例1)
调用枚举类型实例的 values() 方法可以将枚举的所有成员以数组形式返回,也可以通过该方法获取枚举类型的成员
enum Signal
{
//定义一个枚举类型
GREEN,YELLOW,RED;
}
public static void main(String[] args)
{
for(int i=0;i<Signal.values().length;i++)
{
System.out.println("枚举成员:"+Signal.values()[i]);
}
}
输出:
枚举成员:GREEN
枚举成员:YELLOW
枚举成员:RED
例2)
调用 valueOf() 方法获取枚举的一个成员,再调用 compareTo() 方法进行比较,并输出结果。
public class TestEnum
{
public enum Sex
{
//定义一个枚举
male,female;
}
public static void main(String[] args)
{
compare(Sex.valueOf("male")); //比较
}
public static void compare(Sex s)
{
for(int i=0;i<Sex.values().length;i++)
{
System.out.println(s+"与"+Sex.values()[i]+"的比较结果是:"+s.compareTo(Sex.values()[i]));
}
}
}
输出:
male与male的比较结果是:0
male与female的比较结果是:-1
例3)
通过调用枚举类型实例的 ordinal() 方法可以获取一个成员在枚举中的索引位置
public class TestEnum1
{
enum Signal
{
//定义一个枚举类型
GREEN,YELLOW,RED;
}
public static void main(String[] args)
{
for(int i=0;i<Signal.values().length;i++)
{
System.out.println("索引"+Signal.values()[i].ordinal()+",值:"+Signal.values()[i]);
}
}
}
输出:
索引0,值:GREEN
索引1,值:YELLOW
索引2,值:RED
为枚举添加方法
Java 为枚举类型提供了一些内置的方法,同时枚举常量也可以有自己的方法。此时要注意必须在枚举实例的最后一个成员后添加分号,而且必须先定义枚举实例。
public class Test
{
public enum Color
{
RED("红色",1),GREEN("绿色",2),WHITE("白色",3),YELLOW("黄色",4);
//成员变量
private String name;
private int index;
//构造方法
private Color(String name,int index)
{
this.name=name;
this.index=index;
}
//覆盖方法
@Override
public String toString()
{
return this.index+"-"+this.name;
}
}
public static void main(String[] args)
{
System.out.println(Color.RED.toString()); //输出:1-红色
}
}