枚举类是一种特殊类。
特点
1、枚举类第一行,只能写枚举对象名称,且要用逗号隔开
2、这些名称,本质是常量,每个常量都记住了枚举类的一个对象
3、枚举类都是最终类,不能再继承
语法
package enumdemo1;
//枚举类都是继承自java.lang.Enum类
//枚举类中的对象,只能用枚举类的名称来调用,不能用new关键字来创建对象
//枚举类是最终类,不能再继承
//枚举类的第一行只能罗列一些名称,这些名称本质上是常量,每个常量会记住枚举类的一个对象
public enum A {
X,Y,Z
//若只有一个常量,也可以看作单例类
}
上述代码就创建了一个简单的枚举类。
枚举类还重写了一些普通类的方法,例如toString方法,使直接打印就是对象的名字
package enumdemo1;
public class Text {
//目的:认识枚举类
public static void main(String[] args) {
A a = A.X;
System.out.println(a);//枚举类的对象,
// 直接打印就是对象的名字,重写了toString方法
}
}
通过一个简单的方向控制案例,我们对比传统常量与枚举的实现方式,快速理解枚举的核心价值与基础语法。
package enumdemo2;
public class Constant {
public static final int UP=0;
public static final int DOWN=1;
public static final int LEFT=2;
public static final int RIGHT=3;
}
package enumdemo2;
public enum Diretion {
UP,DOWN,LEFT,RIGHT
}
package enumdemo2;
public class Text1 {
public static void main(String[] args) {
move1(Constant.UP);
move2(Diretion.UP);
}
public static void move1(int diretion)
{
switch (diretion)
{
case Constant.UP:
System.out.println("向上");
break;
case Constant.DOWN:
System.out.println("向下");
break;
case Constant.LEFT:
System.out.println("向左");
break;
case Constant.RIGHT:
System.out.println("向右");
break;
default:
System.out.println("无效");
break;
}
}
public static void move2(Diretion diretion)
{
switch (diretion)
{
case Diretion.UP:
System.out.println("向上");
break;
case DOWN: //switch中Diretion.UP和UP是同一个对象,所以可以省略Diretion
System.out.println("向下");
break;
case LEFT:
System.out.println("向左");
break;
case RIGHT:
System.out.println("向右");
break;
}
}
}
相比于move1,move2可以直接杜绝无效参数(使用无效参数时Diretion类中没有,会直接报错),且易于维护。
优势:参数只能是Direction的四个实例,杜绝无效值
代码自解释性强,无需注释说明数字含义。
并且,switch中可以自识别接受的是枚举类,在case后不用采用类名.成员变量名 的形式引用成员变量,可以直接用成员变量名,更方便。