> 文章列表 > 枚举类(自定义实现枚举类)

枚举类(自定义实现枚举类)

枚举类(自定义实现枚举类)

枚举概述:

        是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有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语句中的使用