枚举的概述
什么是枚举
枚举是Java中的一种特殊类型
枚举的作用
"是为了做信息的标志和信息的分类"。
定义枚举类的格式
修饰符 enum 枚举名称{
第一行都是罗列枚举类实例的名称。
}
示例:
public enum Season {
SPRING, SUMMER, AUTUMN, WINTER;
}
反编译后:
Compiled from "Season.java"
public final class com.itheima.d5_enum.Season extends java.lang.Enum<com.itheima.d5_enum.Season> {
public static final com.itheima.d5_enum.Season SPRING;
public static final com.itheima.d5_enum.Season SUMMER;
public static final com.itheima.d5_enum.Season AUTUMN;
public static final com.itheima.d5_enum.Season WINTER;
private static final com.itheima.d5_enum.Season[] $VALUES;
public static com.itheima.d5_enum.Season[] values();
public static com.itheima.d5_enum.Season valueOf(java.lang.String);
private com.itheima.d5_enum.Season();
private static com.itheima.d5_enum.Season[] $values();
static {};
}
枚举的特征:
枚举类都是继承了枚举类型:java.lang.Enum。
枚举都是最终类,不可以被继承。
构造器都是私有的,枚举对外不能创建对象。
枚举类的第一行默认都是罗列枚举对象的名称的。
枚举类相当于是多例模式。
枚举的使用场景演示
案例说明:
现在开发的超级玛丽游戏需要接收用户输入的四个方向的信号(上下左右),以便控制玛丽移动的方向。
选择常量做信息标志和分类: 虽然可以实现可读性,但是入参值不受约束,代码相对不够严谨,但常量可以存数据。
枚举做信息标志和分类: 代码可读性好,入参约束严谨,代码优雅,是最好的信息分类技术!建议使用!
代码
/**
做信息标志和分类
*/
public enum Orientation {
UP, DOWN, LEFT, RIGHT;
}
public class EnumDemo2 {
public static void main(String[] args) {
// 1、创建一个窗口对象(桌子)
JFrame win = new JFrame();
// 2、创建一个面板对象(桌布)
JPanel panel = new JPanel();
// 3、把桌布垫在桌子上
win.add(panel);
// 4、创建四个按钮对象
JButton btn1 = new JButton("上");
JButton btn2 = new JButton("下");
JButton btn3 = new JButton("左");
JButton btn4 = new JButton("右");
// 5、把按钮对象添加到桌布上去
panel.add(btn1);
panel.add(btn2);
panel.add(btn3);
panel.add(btn4);
// 6、显示窗口
win.setLocationRelativeTo(null);
win.setSize(300,400);
win.setVisible(true);
btn1.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
move(Orientation.UP) ; // 让玛丽往上跳
}
});
btn2.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
move(Orientation.DOWN) ; // 让玛丽往下跳
}
});
btn3.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
move(Orientation.LEFT) ; // 让玛丽往左跑
}
});
btn4.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
move(Orientation.RIGHT) ; // 让玛丽往右跑
}
});
}
public static void move(Orientation o){
// 控制玛丽移动
switch (o) {
case UP:
System.out.println("玛丽往上飞了一下~~");
break;
case DOWN:
System.out.println("玛丽往下蹲一下~~");
break;
case LEFT:
System.out.println("玛丽往左跑~~");
break;
case RIGHT:
System.out.println("玛丽往→跑~~");
break;
}
}
}