本章目标
掌握枚举的作用
可以使用enum关键字定义一个枚举类

 

枚举类型简介
在JDK 1.5之前,JAVA可以有两种方式定义新类型:类和接口。对于大部分面向对象编程来说,这两种方法看起来似乎足够了。但是在一些特殊情况下,这些方法就不适合。例如,想定义一个Color类,它只能有 Red、Green、Blue三种值,其他的任何值都是非法的,那么JDK 1.5之前虽然可以构造这样的代码,但是要做很多的工作,也有可能带来各种不安全的问题。而JDK 1.5之后引入的枚举类型(Enum)就能避免这些问题。

 

使用简单类完成枚举操作

class Color{
	public static final Color RED = new Color("红色");//定义第一个对象
	public static final Color GREEN = new Color("绿色");//定义第二个对象
	public static final Color BLUE = new Color("蓝色");//定义第三个对象
	private String name;
	//构造方法私有化,同时设置颜色的名称
	public Color(String name) {
		this.name = name;
	}
	public String getName() {//取得颜色名称
		return name;
	}
	public void setName(String name) {//设置颜色名称
		this.name = name;
	}
	//得到一个颜色,只能从固定的几个颜色中取得
	public static Color getInstance(int i){
		switch(i){
			case 1:{//返回红色对象
				return RED;
			}  
			case 2:{//返回绿色对象
				return GREEN;
			}  
			case 3:{//返回蓝色对象
				return BLUE;
			}  
			default:{
				return null;//错误的值
			}
		}
	}
}
public class ColorDemo01 {
	public static void main(String[] args) {
		Color c1 = Color.RED;//取得红色
		System.out.println(c1.getName());//输出名字
		Color c2 = Color.getInstance(3);//根据编号取得的名字
		System.out.println(c2.getName());//输出名字
	}
/* 结果:
 * 红色
 * 蓝色
 * */
}

 

使用接口表示一组范围

public interface Color {
	public static final int RED = 1;//表示红色
	public static final int GREEN = 2;//表示绿色
	public static final int BLUE = 3;//表示蓝色
}

 

代码的问题

public class ColorDemo02 {
	public static void main(String[] args) {
		System.out.println(Color.RED+Color.GREEN);//颜色相加
	}
/* 结果:
 * 3
 * */
}

 

定义一个枚举类型
在JDK 1.5之后,引入了一个新的关键字类型 —— enum,可以直接定义枚举类型,格式如下:
——[public] enum 枚举类型名称{
  枚举对象1,枚举对象2,…,枚举对象n ;
  }

定义一个Color的枚举类型

public enum Color {//定义枚举类型
	RED,GREEN,BLUE;//定义枚举的 3 个类型
}

 

 

取出一个枚举内容

public class GetEnumContent {
	public static void main(String[] args) {
		Color c = Color.BLUE;//取出蓝色
		System.out.println(c);//输出信息
	}
/* 结果:
 * BLUE
 * */
}

 

使用foreach输出枚举内容

public class PrintEnum {
	public static void main(String[] args) {
		for(Color c : Color.values()){//枚举.values() 表示得到全部枚举的内容
			System.out.println(c);//输出枚举内容
		}
	}
/* 结果:
 * RED
 * GREEN
 * BLUE
 * */
}

 

使用switch进行判断

public class SwitchPrintDemo {
	public static void main(String[] args) {
		for(Color c : Color.values()){//枚举.values() 表示得到全部枚举的内容
			print(c);
		}
	}
	public static void print(Color color){
		switch(color){  // 判断每个颜色
		case RED:{  // 直接判断枚举内容
			System.out.println("红颜色") ;
			break ;
		}case GREEN:{  // 直接判断枚举内容
			System.out.println("绿颜色") ;
			break ;
		}case BLUE:{  // 直接判断枚举内容
			System.out.println("蓝颜色") ;
			break ;
		}default:{  // 未知内容
			System.out.println("未知颜色") ;
			break ;
		}
		}
	}
/* 结果:
 * 红颜色
 * 绿颜色
 * 蓝颜色
 * */
}