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