黑马程序员——Java之枚举

 

------Java培训、Android培训、iOS培训、Net培训、期待与您交流! -------

一、枚举的概述       

        枚举在Java语言中的作用很大,它可以对类似的相同类型的对象同时进行声明,在程序中调用这些元素时,不会出现混淆和重复。由于枚举的统一性,使得我们编写的代码量大大减少,同时也增加了程序的阅读性和可修改性。Java5新增了一个enum的关键字,用以定义枚举类。

       枚举类一般的定义语法格式如下:

    

例如:举一个例子,比如设枚举名为weekday,枚举值有7个,即一周的7天。则凡被说明为weekday类型的变量取值,只能是这7天中的某一天。枚举变量有三种说明方式,我们可以采取任意一种方式进行说明:

    

示例:关于颜色类的例子

//创建关于Color类的枚举
enum Color {RED ,YELLON , BLUE;}
public class TextColor {

	public static void main(String[] args) {
		Color t = Color.BLUE;
		//调用Color类对象
		System.out.println(t);
	}
}

运行结果:

BLUE

 

二、枚举类和枚举关键字

        枚举类型的出现,有助于简洁程序的代码量,减少出错率。在大多数情况下,枚举类和枚举关键字是相互依存的。

(1)枚举类

       枚举类是在java.lang包下的一个公共类,它的作用是用来构造新的枚举类型。这是JDK 1.5之后Java推出的一个新的类,用来完善枚举这一常用集合在Java中的不足。在JDK API中我们可以看到,enum类定义了大约十多个方法。我们简要的介绍一下这些方法:

示例:

public class TextColor {
    //创建关于Sex类的枚举
	public static enum Sex {
		MALE , FEMALE
	}
	public static void main(String[] args) {
		//返回枚举变量的名称
		System.out.printf("Sex.FEMALE.toString(): \t%n  %s", Sex.FEMALE.toString());
		//返回枚举变量在Sex中的位置
		System.out.printf("Sex.FEMALE.ordinal(): \t%s  %n", Sex.FEMALE.ordinal());
		//返回枚举变量的类信息
		System.out.printf("Sex.FEMALE.getClass(): \t%s  %n", Sex.FEMALE.getClass());
		System.out.println("%n遍历所有的Sex枚举变量:");
		//对枚举类型进行遍历
		for (Sex sex : Sex.values()) {
			System.out.printf("%s," , sex);
		}
		switch (Sex.FEMALE) {
		case MALE:
			break;
		case FEMALE:
			break;
		default:
		}
	}
}

运行结果:

Sex.FEMALE.toString(): 	FEMALE  
Sex.FEMALE.ordinal(): 	1  
Sex.FEMALE.getClass(): 	class TextColor$Sex  
%n遍历所有的Sex枚举变量:
MALE,FEMALE,


(2)枚举关键字

       相对于枚举类,枚举关键字(enum关键字)则是定义的一个枚举类型。实际上,在此次定义的过程中,通过enum关键字相当于定义了一个类,并且此类将继承enum类。

示例:

//创建关于Sex类的枚举
enum Color{ RED , YELLOW , BLUE;}
public class TextColor {
	
	public static void main(String[] args) {
		
		//对枚举类型进行遍历
		for (Color c : Color.values()) {
			//调用name()和ordinal方法输出编号
			System.out.println(c.name()+"编号"+c.ordinal());
		}
	}
}

运行结果:

RED编号0
YELLOW编号1
BLUE编号2

            而枚举类与枚举关键字的区别就是可以直接调用Java中受保护的enum类的构造方法。 

 

三、枚举的构造方法、接口和抽象方法

       枚举的使用非常灵活。枚举可以应用于代码中的各个角落 ,只要定义的对象具有枚举的形式,均可以使用枚举对其定义,这样在减少代码量的同时,也增加了代码的可读性和可操作性。我们下面分别对枚举的构造方法、接口和抽象方法作一简要说明。

(1)枚举的构造方法

        在枚举中可以直接定义构造方法。但要注意的是:一旦构造方法定义之后,则所有的枚举对象都必须明确调用此构造方法。

示例:定义两个构造方法getName()和setName()来获取和修改枚举元素。

public enum Color{ RED("红色") , YELLOW("黄色"), BLUE("蓝色");}
	private String name;
	//构造getName方法
	public String getName() {
		return name;
	}
	//构造setName方法
	public void setName(String name) {
		this.name = name;
	}

(2)枚举的接口

        当一个枚举实现一个接口之后,各个枚举对象都必须分别实现接口中的抽象方法。

示例:

//创建一个接口Dome
 interface Dome{
	 //声明一个getColor()方法
	 public  String getColor() {
	 }
 }
	
//如何一个对象必须分别实现接口中的抽象方法		
 enum Color implements Dome{
	RED{
		public String getColor() {
			return "红色";
		}
	},
	YELLOW{
		public String getColor() {
			return "黄色";
		}
	},
	BLUE{
		public String getColor() {
			return "蓝色";
		};
    }
}

public class TextColor {
	public static void main(String[] args) {
		//对枚举类型进行遍历
		for (Color c : Color.values()) {
			System.out.println(c.ordinal()+" —— "+c.name()+ ":"+ c.getColor());
		}
    }
}

运行结果:

0 —— RED:红色
1 —— YELLOW:黄色
2 —— BLUE:蓝色


 (3)枚举的抽象办法

         我们可以通过枚举实现接口,同样,Java也可以在枚举中直接定义抽象方法。并且在一个枚举中可以定义一个或多个抽象方法。同样要注意的是:枚举中的每个对象都必须单独地实现此方法。

示例:


//如何一个对象必须分别实现接口中的抽象方法		
 enum Color {
	RED{
		public String getColor() {
			return "红色";
		}
	},
	YELLOW{
		public String getColor() {
			return "黄色";
		}
	},
	BLUE{
		public String getColor() {
			return "蓝色";
		}
	};
	//定义抽象办法
	public abstract String getColor();
}

public class TextColor {
	public static void main(String[] args) {
		//对枚举类型进行遍历
		for (Color c : Color.values()) {
			System.out.println(c.ordinal()+" —— "+c.name()+ ":"+ c.getColor());
		}
    }
}


运行结果:

0 —— RED:红色
1 —— YELLOW:黄色
2 —— BLUE:蓝色


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值