Java基礎-枚舉Enum

枚舉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. 構造函數

構造函數必須定義爲私有的;java

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類方法

經常使用方法:app

  • 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);
        }
    }

}
相關文章
相關標籤/搜索