Java基础-枚举Enum

牧云@^-^@ 提交于 2020-05-03 21:13:39

枚举Enum

特点

  • enum是一个特殊的class
  • enum类的构造函数必须是私有的
  • 枚举类可以继承抽象类,实现接口
  • switch接受enum值

语法

1. 定义

enum 类名{  
    实例1,实例2,实例3.....;  
    方法、属性、构造函数  
} 

2. Simple

public class EnumDemo01 {  
    enum Fruit{  
        apple,banana,orange;  
    }  
    public static void main(String[] args) {  
        fun(Fruit.apple);  
    }  
    public static void fun(Fruit f){  
        System.out.println("fruit");  
    }  
  
} 

3. 构造函数

构造函数必须定义为私有的;

public class EnumDemo01 {  
    enum Fruit{  
        apple("1"),banana("2"),orange("3");  
        private String value;  
        //构造函数必须是私有的
        private Fruit(String value){  
            this.value = value;  
        }  
    }  
    public static void main(String[] args) {  
        fun(Fruit.apple);  
    }  
    public static void fun(Fruit f){  
        System.out.println(f.value);  
    }  
}  

4. 抽象方法

public class EnumDemo01 {  
    enum Fruit{  
        apple("1"){  
            @Override  
            public String getValue() {  
                return "苹果";  
            }  
              
        },banana("2"){  
            @Override  
            public String getValue() {  
                return "香蕉";  
            }  
        },orange("3"){  
            @Override  
            public String getValue() {  
                return "橘子";  
            }  
        };  
        private String value;  
        private Fruit(String value){  
            this.value = value;  
        }  
        public abstract String getValue();  
    }  
    public static void main(String[] args) {  
        fun(Fruit.apple);  
    }  
    public static void fun(Fruit f){  
        System.out.println(f.getValue());  
    }  
}

5. Enum类方法

常用方法:

  • Fruit.apple.name();  获取实例名称
  • Fruit.apple.ordinal(); 获取此实例的序号;
  • Fruit f = Fruit.valueOf("实例名称");  根据实例名称返回实例;
  • Fruit[] fs = Fruit.values(); 返回Fruit类全部的实例;
public class EnumDemo01 {  
    enum Fruit{  
        apple("1"){  
            @Override  
            public String getValue() {  
                return "苹果";  
            }  
              
        },banana("2"){  
            @Override  
            public String getValue() {  
                return "香蕉";  
            }  
        },orange("3"){  
            @Override  
            public String getValue() {  
                return "橘子";  
            }  
        };  
        private String value;  
        private Fruit(String value){  
            this.value = value;  
        }  
        public abstract String getValue();  
    }  
    public static void main(String[] args) {  
        fun(Fruit.apple);  
    }  
    public static void fun(Fruit f){  
        System.out.println(f.name()+"的次序:"+f.ordinal());  
        System.out.println(Fruit.valueOf("orange").getValue());  
        System.out.println(f.name());  
        Fruit[]fs = Fruit.values();  
        System.out.print("Fruit实例:");  
        for(Fruit e:fs){  
            System.out.print(e.getValue()+"、");  
        }  
    }  
}  

6. 完整演示代码

package com.melon.basic.enumeration;


import java.util.EnumMap;
import java.util.EnumSet;

/*
 * 枚举类型的完整演示代码
 */
public class LightTest {
    // 1.定义枚举类型
    public enum Light {
        // 利用构造函数传参
        RED(1), GREEN(3), YELLOW(2);
        // 定义私有变量
        private int nCode;

        // 构造函数,枚举类型只能为私有
        private Light(int _nCode) {
            this.nCode = _nCode;
        }

        @Override
        public String toString() {
            return String.valueOf(this.nCode);
        }
    }

    /**
     * @param args
     */

    public static void main(String[] args) {
        // 1.遍历枚举类型
        System.out.println("演示枚举类型的遍历 ......");
        testTraversalEnum();
        // 2.演示EnumMap对象的使用
        System.out.println("演示EnmuMap对象的使用和遍历.....");
        testEnumMap();
        // 3.演示EnmuSet的使用
        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);
        }
    }

    /**
     * 演示EnumMap的使用,EnumMap跟HashMap的使用差不多,只不过key要是枚举类型
     */

    private static void testEnumMap() {
        // 1.演示定义EnumMap对象,EnumMap对象的构造函数需要参数传入,默认是key的类的类型
        EnumMap<Light, String> currEnumMap = new EnumMap<Light, String>(
                Light.class);
        currEnumMap.put(Light.RED, "红灯");
        currEnumMap.put(Light.GREEN, "绿灯");
        currEnumMap.put(Light.YELLOW, "黄灯");
        // 2.遍历对象
        for (Light aLight : Light.values()) {
            System.out.println("[key=" + aLight.name() + ",value="
                    + currEnumMap.get(aLight) + "]");
        }

    }

    /**
     * 演示EnumSet如何使用,EnumSet是一个抽象类,获取一个类型的枚举类型内容可以使用allOf方法
     */

    private static void testEnumSet() {
        EnumSet<Light> currEnumSet = EnumSet.allOf(Light.class);
        for (Light aLightSetElement : currEnumSet) {
            System.out.println("当前EnumSet中数据为:" + aLightSetElement);
        }
    }

}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!