标签:枚举类 new for int highlight 开始 实现 tle title
枚举类型概念
- package com.lxq.enumm;
-
- public class EnumDemoOne
- {
- private enum InnerEnum
- {
- RED, GREEN, YELLOW
- };
-
- public static void main(String[] args)
- {
- System.out.println(InnerEnum.RED);
- System.out.println(InnerEnum.GREEN);
- System.out.println(InnerEnum.YELLOW);
- }
- }
运行上面的代码,将编辑产生EnumDemoOne.class和EnumDemoOne$InnerEnum.class。
由此说明定义枚举类型其实就是在定义一个类,只不过很多细节由编译器帮你补齐了,所以,某种程度上enum关键词的作用就像是class或interface.当使用enum定义枚举类型时,实际上所定义出来的类型是继承自java.lang.Enum类。而每个被枚举的成员其实就是定义的枚举类型的一个实例,它们都被默认为final。无法改变常数名称所设定的值,它们也是public和static的成员,这与接口中的常量限制相同。可以通过类名称直接使用它们。
Java枚举类型的案例一
- package com.lxq.enumm;
-
- public class EnumDemoTwo
- {
- public enum ColorSelect
- {
- red, green, yellow, blue;
- }
- public static void main(String[] args)
- {
-
- ColorSelect m = ColorSelect.blue;
- switch (m)
- {
-
- case red:
- System.out.println("color is red");
- break;
- case green:
- System.out.println("color is green");
- break;
- case yellow:
- System.out.println("color is yellow");
- break;
- case blue:
- System.out.println("color is blue");
- break;
- }
- System.out.println("遍历ColorSelect中的值");
-
- for (ColorSelect c : ColorSelect.values())
- {
- System.out.println(c);
- }
- System.out.println("枚举ColorSelect中的值有:"+ColorSelect.values().length+"个");
-
- System.out.println(ColorSelect.red.ordinal());
- System.out.println(ColorSelect.green.ordinal());
-
- System.out.println(ColorSelect.yellow.name());
- System.out.println(ColorSelect.blue.name());
-
- System.out.println(ColorSelect.red.compareTo(ColorSelect.green));
-
- ColorSelect red=ColorSelect.valueOf("red");
- System.out.println(red.getClass());
- }
- }
Java枚举类型的案例二
上面案例一的枚举类型的返回值仅仅是该枚举变量的名称而已,我们当然也可以通过参数自己制定更加友好更加形象的枚举类型的返回值。
下面的代码简单来说,就箱单我们有一个类,类中有构造方法和变量clor,那么我们通过new Light("颜色");就可以新建一个类的实例,其实枚举就是这个意思,
RED ("红色"), GREEN ("绿色"), YELLOW ("黄色");这三个就当然于实例化了三个对象。也就是Light RED=new Light("红色"); Light GREEN=new Light("绿色");
Light YELLOW=new Light("黄色");只不过定义了枚举类型后,剩下的工作由java编译器帮我们完成了。
- package com.lxq.enumm;
-
- import java.util.EnumMap;
- import java.util.EnumSet;
-
- public class EnumDemoThree{
-
- public enum Light {
-
- RED ("红色"), GREEN ("绿色"), YELLOW ("黄色");
-
-
- private String clor ;
-
-
- private Light(String clor) {
- this.clor = clor;
- }
-
- public String getClor(){
- return this.clor;
- }
-
- public void setClor(String clor){
- this.clor=clor;
- }
-
- @Override
- public String toString() {
- return this.clor;
- }
- }
-
-
- public static void main(String[] args ) {
-
- System.out.println( " 演示枚举类型的遍历 ......" );
- testTraversalEnum ();
-
- System. out .println( " 演示 EnmuMap 对象的使用和遍历 ....." );
- testEnumMap ();
-
- System. out .println( " 演示 EnmuSet 对象的使用和遍历 ....." );
- testEnumSet ();
- }
-
-
- private static void testTraversalEnum() {
- Light[] allLight = Light.values ();
- for (Light aLight : allLight) {
- System. out .println( " 当前灯 name : " + aLight.name());
- System. out .println( " 当前灯 ordinal : " + aLight.ordinal());
- System. out .println( " 当前灯: " + aLight);
- }
- }
-
-
- private static void testEnumMap() {
-
- EnumMap<Light, String> currEnumMap = new EnumMap<Light, String>(
- Light. class );
- currEnumMap.put(Light. RED , " 红灯 " );
- currEnumMap.put(Light. GREEN , " 绿灯 " );
- currEnumMap.put(Light. YELLOW , " 黄灯 " );
-
-
- for (Light aLight : Light.values ()) {
- System. out .println( "[key=" + aLight.name() + ",value="
- + currEnumMap.get(aLight) + "]" );
- }
- }
-
-
- private static void testEnumSet() {
- EnumSet<Light> currEnumSet = EnumSet.allOf (Light. class );
- for (Light aLightSetElement : currEnumSet) {
- System. out .println( " 当前 EnumSet 中数据为: " + aLightSetElement);
- }
- }
- }
Java枚举类型的案例三
案例三在二的基础上增加了构造时的参数个数,使得这样的枚举有更广泛的用处。
- package com.lxq.enumm;
-
- public enum EnumConstant
- {
- WEEK_00("", "请选择"),WEEK_01("01", "周一"), WEEK_02("02", "周二"), WEEK_03("03", "周三");
- private String key;
- private String value;
-
-
- private EnumConstant(String key, String value)
- {
- this.key = key;
- this.value = value;
- }
-
- public String getKey()
- {
- return key;
- }
-
- public void setKey(String key)
- {
- this.key = key;
- }
-
- public String getValue()
- {
- return value;
- }
-
- public void setValue(String value)
- {
- this.value = value;
- }
-
- @Override
- public String toString()
- {
- return this.key+":"+this.value;
-
- }
-
- }
- package com.lxq.enumm;
-
- public class EnumTest
- {
-
-
- public static void main(String[] args)
- {
- EnumConstant[] allday = EnumConstant.values();
- System.out.println("-----------for begin------------------");
- for (EnumConstant day : allday)
- {
- System.out.println(" name : " + day.name());
- System.out.println(" ordinal : " + day.ordinal());
- System.out.println(" : " + day);
- System.out.println(" key : " + day.getKey());
- System.out.println(" value : " + day.getValue());
- }
- System.out.println("-----------for end------------------");
- System.out.println(EnumConstant.WEEK_00);
- System.out.println(EnumConstant.WEEK_01);
- System.out.println(EnumConstant.WEEK_02);
- System.out.println(EnumConstant.WEEK_03);
- }
-
- }
PS:我常把Light叫做枚举类型,把其中的RED等叫做枚举变量或枚举值。
本以为RED只是一个Light类的一个static final的实例而已。但后然发现不是这样的,所以文中相关表述不正确的已加中划线,
正确的枚举类型原理见下一篇,Java学习整理系列之Java枚举类型的原理http://blog.csdn.net/sup_heaven/article/details/355591
【转载】Java枚举类型的使用
标签:枚举类 new for int highlight 开始 实现 tle title
原文地址:https://www.cnblogs.com/Jesuslovesme/p/8982595.html