枚举概述:
是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等
回想单例设计模式:单例类是一个类只有一个实例
那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例,这才能是枚举类
自己实现枚举:
自定义枚举类
案例1: 无参构造
案例2: 带参构造,get方法,toString方法
案例3: 抽象方法
发现自己定义一个枚举类,比较麻烦,所有java就提供了枚举类供我们使用
格式是:只有枚举项的枚举了
public enum 枚举类名{
枚举项1,枚举项2,枚举项3...;
}
自定义枚举类代码实现:
package com.aynu3;public class Light {//创建三个实例public static final Light RED = new Light();public static final Light GREEN = new Light();public static final Light YELLOW = new Light();private Light(){}
}
package com.aynu3;public class Light2 {//创建三个实例public static final Light2 RED = new Light2("红");public static final Light2 GREEN = new Light2("绿");public static final Light2 YELLOW = new Light2("黄");private String name;private Light2(String name){this.name=name;}public String getName(){return name;}public String toString(){return "Light2{"+"name='"+name +'\''+'}';}
}
package com.aynu3;public abstract class Light3 {//创建三个实例public static final Light3 RED = new Light3("红"){@Overridepublic void show() {System.out.println("红");}};public static final Light3 GREEN = new Light3("绿"){@Overridepublic void show() {System.out.println("绿");}};public static final Light3 YELLOW = new Light3("黄"){@Overridepublic void show() {System.out.println("黄");}};private String name;private Light3(String name) {this.name = name;}public String getName() {return name;}public String toString() {return "Light3{" +"name='" + name + '\'' +'}';}public abstract void show();
}
package com.aynu3;public class LightDemo {public static void main(String[] args) {Light r = Light.RED;System.out.println(r); //com.aynu3.Light@27d6c5e0System.out.println("--------");Light2 r2 = Light2.RED;System.out.println(r2); //Light2{name='红'}System.out.println(r2.getName()); //红r2 = Light2.YELLOW;System.out.println(r2); //Light2{name='黄'}System.out.println(r2.getName()); //黄System.out.println("--------");Light3 r3 = Light3.RED;System.out.println(r3); //Light3{name='红'}System.out.println(r3.getName()); //红r3.show(); //红}
}
com.aynu3.Light@27d6c5e0
--------
Light2{name='红'}
红
Light2{name='黄'}
黄
--------
Light3{name='红'}
红
红
通过enum实现枚举类:
package com.aynu4;public enum Light {RED, GREEN, YELLOW;}
package com.aynu4;public enum Light2 {RED("红"), GREEN("绿"), YELLOW("黄");private String name;private Light2(String name){this.name=name;}public String getName() {return name;}@Overridepublic String toString() {return "Light2{" +"name='" + name + '\'' +'}';}
}
package com.aynu4;public enum Light3 {RED("红"){@Overridepublic void show() {System.out.println("红");}},GREEN("绿"){@Overridepublic void show() {System.out.println("绿");}},YELLOW("黄"){@Overridepublic void show() {System.out.println("黄");}};private String name;private Light3(String name){this.name=name;}public String getName() {return name;}@Overridepublic String toString() {return "Light3{" +"name='" + name + '\'' +'}';}public abstract void show();
}
package com.aynu4;public class LightDemo {public static void main(String[] args) {Light r = Light.RED;System.out.println(r); //REDSystem.out.println("----------");Light2 r2=Light2.RED;System.out.println(r2);System.out.println(r2.getName());r2 = Light2.YELLOW;System.out.println(r2);System.out.println(r2.getName());System.out.println("----------");Light3 r3= Light3.RED;System.out.println(r3);System.out.println(r3.getName());r3.show();}
}
RED
----------
Light2{name='红'}
红
Light2{name='黄'}
黄
枚举的注意事项
定义枚举类要用关键字enum
所有枚举类都是Enum的子类
枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略
枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举("");
枚举类也可以有抽象方法但是枚举项必须重写该方法
枚举在switch语句中的使用