本章目标
掌握枚举的作用
可以使用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 ;
}
}
}
/* 结果:
* 红颜色
* 绿颜色
* 蓝颜色
* */
}