枚举的概述
1.枚举是Java中的一种特殊类型
2.枚举的作用:"是为了做信息的标志和信息的分类"。
定义枚举类的格式:
修饰符enum 枚举名称{
第一行都是罗列枚举类实例的名称。
)
enum Season{
SPRING , SUMMER ,AUTUMN , WINTER;
}
反编译为
Compiled from "Season.java"
public final class Season extends java.lang.Enum<Season> {
public static final Season SPRING;
public static final Season SUMMER;
public static final Season AUTUMN;
public static final Season WINTER;
public static Season[] values();
public static Season valueOf(java.lang.String);
static {};
}
枚举的特征:
1.枚举类都是继承了枚举类型:java.lang.Enum
2.枚举都是最终类,不可以被继承。
3.构造器的构造器都是私有的,枚举对外不能创建对象。
4.枚举类的第一行默认都是罗列枚举
5.对象的名称的。枚举类相当于是多例模式。
案例说明:
现在开发的超级玛丽游戏需要接收用户输入的四个方向的信号(上下左右),以便控制玛丽移动的方向。
选择常量做信息标志和分类:
代码可读性好,实现了软编码形式。
枚举做信息标志和分类:
代码可读性好,入参约束严谨,代码优雅,是最好的信息分类技术!建议使用!
package com.itheima.d5_enum;
public enum Season {
// 第一行罗列枚举的实例:对象的名称。
SPRING,SUMMER,AUTUMN, WINTER;
}
package com.itheima.d4_constant;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test2 {
public static void main(String[] args) {
// 目标:理解常量的另外一个作用:做信息的标志和分类。
// 模拟:控制玛丽的移动:上下左右。
// 桌面编程
// 1、创建窗口
JFrame win = new JFrame("超级玛丽");
win.setSize(300, 200);
// 2、设计一个面板(桌布)
JPanel jPanel = new JPanel();
win.add(jPanel);
// 2、放置几个按钮
JButton b1 = new JButton("上");
jPanel.add(b1);
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 控制玛丽往上跳
move(Constant.UP);
}
});
JButton b2 = new JButton("下");
jPanel.add(b2);
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 控制玛丽往下蹲
move(Constant.DOWN);
}
});
JButton b3 = new JButton("左");
jPanel.add(b3);
b3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 控制玛丽往左走
move(Constant.LEFT);
}
});
JButton b4 = new JButton("右");
jPanel.add(b4);
b4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 控制玛丽往右走
move(Constant.RIGHT);
}
});
win.setLocationRelativeTo(null);
win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
win.setVisible(true);
}
public static void move(int orientation){
// 控制玛丽移动
switch (orientation) {
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;
}
}
}