enumeration

package JAVABasic;
/**
 * 一、Color枚舉類就是class,並且是一個不能夠被繼承的final類。
 * 其枚舉值(RED,BLUE...)都是Color類型的類靜態常量, 
 * 咱們能夠經過下面的方式來獲得Color枚舉類的一個實例:
 * Color c=Color.RED; 
 * 注意:這些枚舉值都是public static final的,也就是咱們常常所定義的常量方式,
 * 所以枚舉類中的枚舉值最好所有大寫。
 * 
 * 二、即然枚舉類是class,固然在枚舉類型中有構造器,方法和數據域。可是,枚舉類的構造器有很大的不一樣:
 * (1) 構造器只是在構造枚舉值的時候被調用。
 * (2) 構造器只能私有private,絕對不容許有public構造器。 這樣能夠保證外部代碼沒法新構造枚舉類的實例。
 * 
 * 
 * @author markGao
 *
 */
public class EnumTest {
    enum Color {
        RED(255, 0, 0), BLUE(0, 0, 255), BLACK(0, 0, 0), YELLOW(255, 255, 0), GREEN(
                0, 255, 0);
        // 構造枚舉值,好比RED(255,0,0)
        private int redValue; // 自定義數據域,private爲了封裝。
        private int greenValue;
        private int blueValue;

        //構造器只能私有private,絕對不容許有public構造器。 這樣能夠保證外部代碼沒法新構造枚舉類的實例。
        private Color(int rv, int gv, int bv) {
            this.redValue = rv;
            this.greenValue = gv;
            this.blueValue = bv;
        }

        public String toString() { // 覆蓋了父類Enum的toString()
            return super.toString() + "(" + redValue + "," + greenValue + ","
                    + blueValue + ")";
        }

    }

    public static void main(String args[]) {
        Color color = Color.RED;
        System.out.println(color); // 調用了toString()方法 toString()方法: 返回枚舉常量的名稱
        switch (color) {
        case RED:
            System.out.println("it's red");
            break;
        case BLUE:
            System.out.println("it's blue");
            break;
        case BLACK:
            System.out.println("it's blue");
            break;
        }
        // ordinal()方法: 返回枚舉值在枚舉類種的順序。這個順序根據枚舉值聲明的順序而定
        System.out.println(Color.RED.ordinal());
        System.out.println(Color.BLUE.ordinal());
        System.out.println(Color.BLACK.ordinal());

        // compareTo()方法: Enum實現了java.lang.Comparable接口,所以能夠比較象與指定對象的順序。
        // Enum中的compareTo返回的是兩個枚舉值的順序之差。固然,前提是兩個枚舉值必須屬於同一個枚舉類,
        // 不然會拋出ClassCastException()異常
        System.out.println(Color.RED.compareTo(Color.BLUE));

        // values()方法: 靜態方法,返回一個包含所有枚舉值的數組
        Color[] colors = Color.values();
        for (Color c : colors) {
            System.out.print(c + ",");
        }
        System.out.println();
        // valueOf()方法: 這個方法和toString方法是相對應的,返回帶指定名稱的指定枚舉類型的枚舉常量
        System.out.println(Color.valueOf("BLUE"));

    }

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