Java枚举类型(enum)简介_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java枚举类型(enum)简介

Java枚举类型(enum)简介

 2013/9/14 12:46:25  forestqqqq  程序员俱乐部  我要评论(0)
  • 摘要:该示例是在百度上搜到的:publicclassTestEnum{/*最普通的枚举*/publicenumColorSelect{red,green,yellow,blue;}/*枚举也可以象一般的类一样添做加方法和属性,你可以为它添加静态和非静态的属性或方法,这跟类的使用是一样的*/publicenumSeason{//枚举列表必须写在最前面,否则编译出错winter,spring,summer,fall;privatefinalstaticStringlocation="Phoenix"
  • 标签:简介 Java 枚举

class="MsoNormal">该示例是在百度上搜到的:

public class TestEnum{
    /*最普通的枚举*/
    public enum ColorSelect{
        red, green, yellow, blue;
    }
 
    /* 枚举也可以象一般的类一样添做加方法和属性,你可以为它添加静态和非静态的属性或方法,这跟类的使用是一样的 */
    public enum Season {
        // 枚举列表必须写在最前面,否则编译出错
        winter, spring, summer, fall;
 
        private final static String location = "Phoenix";       
 
        public static Season getBest() {
            if (location.equals("Phoenix"))
                return winter;
            else
                return summer;
        }
    }
    /*还可以有构造方法*/
    public enum Temp {
        /*通过括号赋值,而且必须有对应的带参构造器,否则编译出错
         * 赋值必须是都赋值或都不赋值,不能一部分赋值一部分不赋值
         * 如果不赋值则不能写构造器,赋值编译也出错*/
        absoluteZero(-459), freezing(32),boiling(212), paperBurns(451);
       
        private final int value;
        public int getValue() {
            return value;
        }
        //构造器默认也只能是private, 从而保证构造函数只能在内部使用
        Temp(int value) {
            this.value = value;
        }
    }
 
    public static void main(String[] args) {
        /*
         * 枚举类型是一种类型,用于定义变量,以限制变量的赋值时通过"枚举名.值"来取得相关枚举中的值
         */
        ColorSelect m = ColorSelect.blue;
        switch (m) {
        /*
         * 注意:枚举重写了toString(),所以枚举变量的值是不带前缀的
         * 所以为blue而非ColorSelect.blue
         */
        case red:
            System.out.println("color is red");
            break;
        case green:
            System.out.println("color is green");
            break;
        case yellow:
            System.out.println("color is yellow");
            break;
        case blue:
            System.out.println("color is blue");
            break;
        }
        System.out.println("遍历ColorSelect中的值");
        /*通过values()获得枚举值的数组*/
        for (ColorSelect c : ColorSelect.values()) {
            System.out.println(c);
            }
        System.out.println("枚举ColorSelect中的值有:"+ColorSelect.values().length+"个");
        /*ordinal()返回枚举值在枚举中的索引位置,从0开始*/
        System.out.println(ColorSelect.red.ordinal());//0
        System.out.println(ColorSelect.green.ordinal());//1
        System.out.println(ColorSelect.yellow.ordinal());//2
        System.out.println(ColorSelect.blue.ordinal());//3
 
        /*枚举默认实现了java.lang.Comparable接口*/
        System.out.println(ColorSelect.red.compareTo(ColorSelect.green));
 
        System.out.println(Season.getBest());
        for(Temp t:Temp.values()){
            /*通过getValue()取得相关枚举的值*/
            System.out.println(t+"的值是"+t.getValue());
        }
    }
}

?

1,枚举类型相当于特殊的类,经过编译之后同样产生一个class文件。枚举类型中可以定义方法(包括构造方法)、属性、静态的方法和属性、继承接口、重载覆盖等,类似于class

2,枚举类型的定义:

public enum ColorSelect {
        red, green, yellow, blue;
}

?

枚举类型使用enum来声明类型,枚举类型的每一个枚举值(枚举属性)都是枚举类型的实例,且都是public static final类型的实例。

3,枚举类型的继承:

(1),所有的枚举类型都隐含的继承自java.lang.Enum类,又因为Java是单继承的,所以一个枚举类型不能继承任何其他的类。

(2),枚举类型因为继承了java.lang.Enum类,又因为java.lang.Enum实现了java.lang.Comparablejava.io.Serializable接口,所以枚举类型也默认实现了这两个接口。

4,枚举类型的构造方法:

(1),必须是private访问权限,不能使public权限。这样就可以保证在枚举类型定义的外部无法使用new来创建枚举值。

(2),使用构造方法(当然是带参数的构造方法了!)赋值,则必须给所有的枚举值赋值;如果写了构造方法,却没有使用其用于赋值,则会报错。

5,继承自父类(java.lang.Enum)的方法:

(1)? ordinal()方法: 返回枚举值在枚举类种的顺序。这个顺序根据枚举值声明的顺序而定。

Color.RED.ordinal();  //返回结果:0
Color.BLUE.ordinal();  //返回结果:1

?

(2)? compareTo()方法: Enum实现了java.lang.Comparable接口,因此可以比较象与指定对象的顺序。Enum中的compareTo返回的是两个枚举值的顺序之差。当然,前提是两个枚举值必须属于同一个枚举类,否则会抛出ClassCastException()异常(见示例)

Color.RED.compareTo(Color.BLUE);  //返回结果 -1

?

(3)? values()方法: 静态方法,返回一个包含全部枚举值的数组。

Color[] colors=Color.values();
for(Color c:colors){
System.out.print(c+",");
}//返回结果:RED,BLUE,BLACK YELLOW,GREEN,

?

4)? toString()方法: 返回枚举常量的名称。

Color c=Color.RED;
System.out.println(c);//返回结果: RED

?

(5)? valueOf()方法: 这个方法和toString方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。

Color.valueOf("BLUE");   //返回结果: Color.BLUE

?

(6)? equals()方法: 比较两个枚举类对象的引用。

6,枚举类型可以用于switch语句(见示例)。

7,枚举集合的使用:java.util.EnumSetjava.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 keyenum类型,而value则可以是任意类型。

?

参考文章:

http://www.cnblogs.com/Fskjb/archive/2009/08/03/1537917.html

http://blog.csdn.net/sunxin1001/article/details/7532632

?

http://cardyn.iteye.com/blog/904534

上一篇: 英国种子站thebox.bz关闭 下一篇: Java
发表评论
用户名: 匿名