首页 > 代码库 > Java SE学习之枚举总结

Java SE学习之枚举总结

本文是学习网络上的文章时的总结以及自己的一点实践,感谢大家无私的分享。

最近在看Java基础方面的书的时候,又遇到了枚举的介绍。在网上查了一些资料,对这些资料进行一些总结。

用法一:常量

package meiju;
/**
 * 
* @ClassName: Color 
* @Description: 枚举变量的常量用法
* @author zhangjunshuai junshuaizhang@163.com 
* @date 2014-11-16 下午07:29:40 
*
 */
public enum Color {
	RED,GREEN,BLANK,YELLOW
}

用法二:switch

package meiju;
/**
 * 
* @ClassName: Signal 
* @Description: 枚举的switch用法 
* @author zhangjunshuai junshuaizhang@163.com 
* @date 2014-11-16 下午07:33:32 
*
 */
enum Signal{
	GREEN,YELLOW,RED
}
public class EnumForswitch {

	Signal color = Signal.RED;
	public void change(){
		switch(color){
		case RED:
			System.out.println("红色");
			break;
		case YELLOW:
			System.out.println("金黄色");
			break;
		case GREEN:
			System.out.println("绿色");
			break;
		default:
				System.out.println("最后");
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

用法三:枚举中的方法

package meiju;
/**
 * 
* @ClassName: ColorMthod 
* @Description: 枚举的方法 
* @author zhangjunshuai junshuaizhang@163.com 
* @date 2014-11-16 下午07:35:09 
*
 */
enum ColorMthod{
	RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLOW("黄色",4);
	private String name;
	private int index;
	//枚举的构造方法 介个是怎么一回事呢?
	private ColorMthod(String name,int index){
		this.name = name;
		this.index = index;
	}
	//普通方法
	public static String getName(int index){
		for(ColorMthod c : ColorMthod.values()){
			if(c.getIndex()== index){
				System.out.println(c.name);
				return c.name;
			}
		}
		return null;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getIndex() {
		return index;
	}
	public void setIndex(int index) {
		this.index = index;
	}
	
}
public class EnumMethod {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ColorMthod.getName(1);

	}

}

用法四:覆盖枚举方法

package meiju;
/**
 * 
* @ClassName: EnumMethodOverride 
* @Description: 覆盖方法 
* @author zhangjunshuai junshuaizhang@163.com 
* @date 2014-11-16 下午07:37:04 
*
 */
public class EnumMethodOverride {

	public enum ColorMethod{
		RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLO("黄色",4);
		private String name;
		private int index;
		
		private ColorMethod(String name,int index){
			this.name = name;
			this.index = index;
			
		}
		@Override
		public String toString(){
			return this.index+"_"+this.name;
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(ColorMethod.RED);
	}

}

用法五:实现接口

package meiju;
/**
 * 
* @ClassName: Behavior 
* @Description: 枚举实现接口 
* @author zhangjunshuai junshuaizhang@163.com 
* @date 2014-11-16 下午07:39:28 
*
 */
interface Behavior{
	void print();
	String getInfo();
}
enum ColorInterface implements Behavior{
	RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLOW("黄色",4);
	private String name;
	private int index;
	
	private ColorInterface(String name,int index){
		this.name = name;
		this.index = index;
	}
	
	public String getInfo(){
		return this.name;
	}
	
	public void print(){
		System.out.println(this.index+":"+this.name);
	}
}
public class EnumInterface {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ColorInterface.RED.print();
	}

}

用法六:枚举集合的使用

package meiju;

import java.util.EnumMap;
import java.util.EnumSet;
/**
 * 
* @ClassName: EnumLIghtTest 
* @Description: 枚举的遍历
* @author zhangjunshuai junshuaizhang@163.com 
* @date 2014-11-16 下午07:41:13 
*
 */
public class EnumLIghtTest {

	//1.定义枚举类型
	public enum Light{
		//2.利用构造参数传参
		RED(1),GREEN(3),YELLOW(2);
		//定义私有变量
		private int nCode;
		// 构造函数,枚举类型只能为私用
		private Light(int _nCode){
			this.nCode = _nCode;
		}
		
		public String toString(){
			return String.valueOf(this.nCode);
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//1.遍历枚举类型
		System.out.println("演示枚举类型的遍历……");
		testTranversalEnum();
		
		//2.EnumMap对象的使用
		System.out.println("演示EnumMap对象的使用和遍历……");
		testEnumMap();
		
		//3.演示EnumSet的使用
		System.out.println("演示EnumSet对象的使用和遍历……");
		testEnumSet();

	}

	/**
	 * 演示枚举类型的遍历
	 */
	private static void testTranversalEnum(){
		Light[] allLight = Light.values();
		for(Light aLight : allLight){
			System.out.println("当前灯name:"+aLight.name());
			System.out.println("当前灯ordinal:"+aLight.ordinal());
			System.out.println("当前灯:"+aLight);
			
		}
	}
	/**
	 * 演示EnumMap的使用,EnumMao跟HashMap的使用差不多,只是key值是枚举类型
	 */
	private static void testEnumMap(){
		//1.演示定义EnumMap对象,EnumMap对象的构造函数需要参数传入,默认是key的类的类型
		EnumMap<Light,String> currEnumMap = new EnumMap<Light, String>(Light.class);
		currEnumMap.put(Light.RED, "红灯");
		currEnumMap.put(Light.GREEN, "绿灯");
		currEnumMap.put(Light.YELLOW, "黄灯");
		
		for(Light aLight :Light.values()){
			System.out.println("[key="+aLight.name()+",value=http://www.mamicode.com/">
用法七:用接口组织枚举

public interface Food {
	enum Coffee implements Food{
		BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
	}
	enum Dessert implements Food{
		FRUIT, CAKE, GELATO
	}
}

枚举相对于final static来说,枚举可以减少变量的定义,在switch中的使用有利于代码的执行效率,同时枚举可以自定义内置方法,还有就是枚举可以使用遍历方法。虽然枚举有一些优势但是枚举不是继承。

参考:

http://www.iteye.com/topic/1116193

http://blog.csdn.net/p106786860/article/details/11516269

Java SE学习之枚举总结