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

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

枚举的定义形式如下:

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

 

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

今天实在太累了,连上12节课,还要做作业,不过还是坚持着学完了今天的java,也写好了笔记发上来。挺开心的。







已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页