枚举可以对类似的相同类型的对象同时进行声明,在程序中调用这些元素时,不会出现混淆或重复。
枚举的定义形式如下:
enum 枚举名{枚举值表};
设有变量a、b、c被说明为上述的weekday,可采用下面三种方式:
enum weekday{sun,mon,tue,wed,thu,fri,sat};
enum weekday a,b,c;
或者
enum weekday{sun,mon,tue,wed,thu,fri,sat}a,b,c;
或者
enum{sun,mon,tue,wed,thu,fri,sat}a,b,c
枚举类可以这样建立:
enum Color
{
RED,GREEN,BLUE;
}
如果上诉代码报错:enum cannot be resolved to a type,表示系统不识别enum。
J2SE1.5新增了enum关键字,用于定义枚举类。所以只有在jdk1.5及以后,enum才能使用。
解决办法:
打开工程对应的properties ——>Java Compiler, 修改 Compiler compliance level为1.5或者1.5以上。
*在Switch语句中使用枚举
package day8;
enum Color
{
RED,GREEN,BLUE;
}
public class EnumDemo {
public static void main(String[] args) {
switch(Color.RED)
{
case RED:
{
System.out.println("红色");
break;
}
case GREEN:
{
System.out.println("绿色");
break;
}
case BLUE:
{
System.out.println("蓝色");
break;
}
}
}
}
运行结果:红色
在JDK1.5以后,通过Enum创建的枚举类型,也可以被Switch语句判断使用。
枚举类Enum是java.lang包下定义的一个公共类,它的作用是用来构造新的枚举类型。Enum类中定义了大约十多个方法,每一种方法都是对用Enum创建的枚举类型的操作,所以Enum类指的是一个完整的类型,它拥有自己的方法。当用枚举关键字enum定义一个枚举类型时,相当于定义了这样一个类并且将此类继承Enum类。被定义的对象拥有Enum类中的构造方法的使用权。
*观察枚举对象的编号
package day8;
enum Color
{
RED,GREEN,BLUE;
}
public class EnumDemo {
public static void main(String[] args) {
//通过for循环并使用values()方法遍历枚举对象c的取值
for(Color c:Color.values())
{
//输出其名称,输出其编号
System.out.println(c.name()+"-->"+c.ordinal());
}
}
}
运行结果:
RED-->0
GREEN-->1
BLUE-->2
在Enum类中构造方法是受保护的,实际上对于每个枚举对象,一旦声明之后就表示自动调用此构造方法,所有的编号均采用自动编号的方式进行。在没有对编号特殊声明时,Java虚拟机一般对被创建的枚举类型对象从0开始自动编号。
在枚举中可以直接定义构造方法,一旦构造方法定义之后,则所有的枚举对象都必须明确地调用此构造方法。
当一个枚举实现一个接口之后,各个枚举对象都必须分别实现接口中的抽象方法。
*枚举的接口
package day8;
interface Info//该接口用来调用getColor方法从而得到枚举类中内容
{
public String getColor();
}
enum Color implements Info//枚举类实现该接口
{
RED
{
public String getColor()
{
return "红色";
}
},
GREEN
{
public String getColor()
{
return "绿色";
}
}
,
BLUE
{
public String getColor()
{
return "蓝色";
}
};
}
public class EnumDemo {
public static void main(String[] args) {
//通过for循环并使用values()方法遍历枚举对象c的取值
for(Color c:Color.values())
{
//输出其名称,输出其编号
System.out.println(c.name()+"-->"+c.ordinal()+":"+c.getColor());
}
}
}
运行结果:
RED-->0:红色
GREEN-->1:绿色
BLUE-->2:蓝色
在枚举中定义抽象方法,则枚举中的每个元素都必须单独实现此方法。
*在枚举中定义抽象方法
package day8;
enum Color
{
RED
{
public String getColor()
{
return "红色";
}
},
GREEN
{
public String getColor()
{
return "绿色";
}
}
,
BLUE
{
public String getColor()
{
return "蓝色";
}
};
public abstract String getColor();//枚举中定义的抽象方法
}
public class EnumDemo {
public static void main(String[] args) {
//通过for循环并使用values()方法遍历枚举对象c的取值
for(Color c:Color.values())
{
//输出其名称,输出其编号
System.out.println(c.name()+"-->"+c.ordinal()+":"+c.getColor());
}
}
}
运行结果:
RED-->0:红色
GREEN-->1:绿色
BLUE-->2:蓝色