您的位置:首页 > 编程语言 > Java开发

【Java学习笔记】8:Java枚举和枚举类

2017-03-29 00:29 519 查看
枚举可以对类似的相同类型的对象同时进行声明,在程序中调用这些元素时,不会出现混淆或重复。

枚举的定义形式如下:

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())
{
//输出其名称,输出其编
4000

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:蓝色

 

参考书籍是人民邮电的《Java从入门到精通》,笔记中的部分例子和释义是基于这本书写的,也有一些来自网络。

今天实在太累了,连上12节课,还要做作业,不过还是坚持着学完了今天的java,也写好了笔记发上来。挺开心的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: