枚举的理解
1.为什么引入枚举
2.枚举的地位:枚举和类、接口有一样的地位---->他的外围声明方式和类、接口一样
举一个例子如下:
有一个Color.java的文件,如下:
public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN}/*外围定义:public enum Color{}..和类、接口声明方式是一样的 */public final class Color extends Enum{public static final Color RED;public static final Color BLUE;public static final Color BLACK;public static final Color YELLOW;public static final Color GREEN;private static final Color ENUM$VALUES[];private Color(String s, int i){super(s, i);}public static Color[] values(){Color acolor[];int i;Color acolor1[];System.arraycopy (acolor = ENUM$VALUES, 0, acolor1 = new Color[i = acolor.length], 0, i);return acolor1;}public static Color valueOf(String s){return (Color)Enum.valueOf(test/Color, s);}static {RED = new Color("RED", 0);BLUE = new Color("BLUE", 1);BLACK = new Color("BLACK", 2);YELLOW = new Color("YELLOW", 3);GREEN = new Color("GREEN", 4);ENUM$VALUES = (new Color[] {RED, BLUE, BLACK, YELLOW, GREEN});}}/*从这里我们可以得出以下的结论:(1)在未编译器之前(也就是在java文件中)enum不是一个类,所以他并不能new,所以在也不能调用其构造函数,其声明只能按枚举规定的语法来(2)而实际在jvm中enum声明定义的类型就是一个类(继承了java.lang.Enum).但其构造函数为私有..所以这个类在外部是不能生成对象..只能类内部生成,且其在内部构造的对象都是public static final类型的(3)从上面反编译的结果可以看出其中的枚举值本质是编译后的类的对象从(2)和(3)可以看出这个类在jvm中的对象个数是由其枚举值的个数来决定的.*/