提出问题
当变量的值是 红灯 时,打印 红灯停;值是 绿灯 时,打印 绿灯行;值是 黄灯 时,打印 黄灯警示
实现:
public static void main(String args[]) {
String color = "红灯";
if( "红灯".equals( color ) ){
System.out.println("红灯停");
}else if( "绿灯".equals( color ) ){
System.out.println("绿灯行");
}else{
System.out.println("黄灯警示!");
}
}
缺点
变量 color 可以是 不合理的值,如:
String color = "白灯";
或者
String color = "李雷";
解决
使用枚举
概述
枚举是一组 固定的可选值
jdk1.5开始添加了枚举数据类型
在Java中,被 enum 关键字修饰的类型就是枚举类型
enum 的全称为 enumeration
应用场景
作为类型,如:
限制变量值只能是
星期一、星期二、星期三、星期四、星期五、星期六、星期日,是固定的,只能选择之一限制变量值只能是 交通灯的
红、绿、黄,是固定的,只能选择之一
好处
可以做 校验,当传入其他值时,会报错
常用方法
在enum中,提供了一些基本方法:
values():静态方法,返回 enum 实例的数组,而且该数组中的元素严格保持在 enum 中声明时的顺序。
name():返回实例名。
ordinal():返回实例声明时的次序,从0开始。
getDeclaringClass():返回实例所属的 enum 类型。
equals() :判断是否为同一个对象。
可以使用 == 来比较enum实例。
此外,java.lang.Enum 实现了 Comparable 和 Serializable 接口,所以也提供 compareTo() 方法。
例子
1. 简单使用
定义枚举,红绿黄灯:
public enum Color {
RED,
GREEN,
BLUE;
}
使用:
public static void main(String args[]) {
Color color = Color.RED; // 只能是枚举成员,不能是其他值
if(color == Color.RED){
System.out.println("红灯停");
}else if(color == Color.GREEN){
System.out.println("绿灯行");
}else{
System.out.println("黄灯警示!");
}
}
遍历枚举:
public static void main2(String args[]) {
for (Color c : Color.values()) {
System.out.println(c + " : " + c.ordinal());
}
}
2. 设置值
public enum Dir {
E("东方"),S("南方"),W("西方"),N("北方");
String name = "";
Dir(String name){
this.name = name;
}
public String getName(){
return name;
}
}
public class TestDir {
public static void main(String[] args) {
Dir dir = Dir.E;
switch (dir) {
case E:
System.out.println(dir.getName());
break;
case S:
System.out.println(dir.getName());
break;
case W:
System.out.println(dir.getName());
break;
case N:
System.out.println(dir.getName());
break;
default:
break;
}
}
}
注意事项:
- 枚举类型的第一行有效代码必须是声明的枚举
- 枚举应用曾经只应用到TestDir类中的内容,重新构造方法,声明属性等都是出现在考题中