61-枚举

49 阅读2分钟
枚举概念: 	1.这种实例(对象)有限而且固定的类,在Java里被称为枚举类。
    2.枚举是新增的引用数据类型,和类,接口是一个级别的,定义枚举的关键字为enum。 
枚举场景举例性别:	Man(男)、Women(女) 交通灯: Red(红)、Green(绿)、Yellow(黄)
public enmu 枚举名{}
1枚举中的常量名字大写,多个常量之间逗号分开
2枚举中有默认的无参数的private修饰的构造方法,如果手写构造方法,也必须是私有修饰的
3构造方法必须写在常量的后面,这时最后一个常量就必须要写分号
4 枚举的调用-直接枚举名.调用
5枚举类的values方法是可以直接使用,获取到的是该枚举类中的对象数组
6由于枚举的常量为静态修饰可以直接枚举名.调用 
7Enum类中的ordinal方法,返回枚举对象的编号
package itheima01;
public enum Light01 {
    //3.需要给该类提供3个固定的对象: 每个对象都有一个编号,从0开始
    RED("红灯", "必须停"),//调用有参构造方法
    GREEN("绿灯", "行"),
    YELLOW("黄灯", "等一等"),
    BLUE();//调用空参构造方法

    //1.因为每个对象中都有对应的属性
    private String COLOR;
    private String INFO;

    //2.通过构造方法给属性赋值,构造方法private修饰,不允许外部创建该类的其它对象
    private Light01(String COLOR, String INFO) {
        this.COLOR = COLOR;
        this.INFO = INFO;
    }

    private Light01(){}

    //4.方便查看数据,覆盖重写toString方法
    @Override
    public String toString() {
        return "Light01{" +
                "COLOR='" + COLOR + '\'' +
                ", INFO='" + INFO + '\'' +
                '}';
    }

    //5.方法获取对象中的属性信息,提供get方法
    //每个对象中的属性信息,不允许修改,不能提供set方法
    public String getCOLOR() {
        return COLOR;
    }

    public String getINFO() {
        return INFO;
    }
} 
public class Demo01Light01 {
    public static void main(String[] args) {
        //每一个常量,都表示这个类的对象。
        Light01 red = Light01.RED;
        //利用反射证明该对象的所属枚举的名称就是Light01
        System.out.println(red);
         System.out.println(red.getName());
        System.out.println(red.getClass().getName());
        System.out.println("------------");

        //重写toString打印内容
        //不重写toString打印"GREEN",说明自定义枚举类没有继承Object
        //自定义枚举类继承Enum,Enum中有toString方法,返回枚举的名称
        System.out.println(Light01.GREEN);

        //Enum类中的ordinal方法,返回枚举对象的编号
        System.out.println(Light01.RED.ordinal());//0
        System.out.println(Light01.GREEN.ordinal());//1
        System.out.println(Light01.YELLOW.ordinal());//2
        System.out.println("-------------");
        
        //values方法获取枚举中的所有对象数组
        Light01[] values = Light01.values();
        
        //遍历
        for (Light01 value : values) {
            System.out.println("编号: " + (value.ordinal() + 1) + "名称: " + value.name() + ", 颜色: " + value.getCOLOR() + ", 信息: " + value.getINFO());
        }

    }
}