package itheima01;
一个类的对象只有固定的几个不可改变的 红 绿 黄
/* (1)枚举中的常量名字大写,多个常量之间逗号分开,最后一个常量可以写分号
(2)每一个常量,都表示这个类的对象。
(3)枚举常量修饰符为public static final(不需要自己写,也不能写)
(4)枚举中有默认的无参数的private修饰的构造方法,如果手写构造方法,也必须是私有修饰的
(5)构造方法必须写在常量的后面,这时最后一个常量就必须要写分号
枚举类的values方法是一个特殊方法(内置方法), 获取到的是该枚举类中的对象数组
枚举的使用 由于枚举的常量为静态修饰可以直接枚举名.调用
枚举是引用数据类型,和类,接口是一个级别的
*/
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.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());
}
}
}