您的位置:首页 > 编程语言 > Java开发

JAVA enum 枚举类型(2017-07-18)

2017-07-18 09:37 323 查看
最近把JAVA书拿过来又看了一遍。看到这个枚举类型。

不过因为工作中,很少用到这个枚举类型,即使需要定义常量,大多数也是用public static fianl。。。

最近看到,我去网上查阅了一番资料,看了一些博主写的文章,结合这些资料,和我自己测试结果,来粗浅的记录下自己的心得。

说道枚举,就不得不说关键词:enum


下面来说一下enum 
的几个需要我们了解的点:

1、enum   
定义的类型是一个类,这些类都集成Enum类,即继承:java.lang.Enum类。既然继承了Enum,那么显而易见,就继承了Enum的很多方法。

2、enum     
定义是一个final类,是不可再次被继承。enum      定义的类里的常量都是final的静态常量。

3、enum    
定义的类中有构造器、方法、和数据域。但是枚举的构造器与一般普通类有些区别:

      ①构造器只在构造枚举值时被调用。

      ②构造器中只能私有private,决不能有public构造器。

JAVA枚举分为三个案例来讲:



案例一:普通JAVA类中定义package test.ENum类;


案例代码:

package test.ENum;

public class ColorEnumTest {

    

    public enum ColorTest{

        RED,GREEN,BLANK

    }

    

    public static void main(String[] args) {

        //1.输入枚举名

        System.out.println("1.    " + ColorTest.RED);

        

        //2.枚举与switch的结合使用,遍历ColorTest选中的数据

        ColorTest test = ColorTest.RED;

        switch (test) {

        case RED:

            System.out.println("2.是RED");

            break;

        case GREEN:

            System.out.println("2.是GREEN");

            break;

        case BLANK:

            System.out.println("2.是BLANK");

            break;

        default:

            break;

        }

        

        //3.枚举与for循环的结合使用,通过values获取所有值

        for(ColorTest ct : ColorTest.values()){

            System.out.println("3.本次打印的颜色是:" + ct);

        }

        

        //4.枚举常用方法

        

        /*4.1.获取ColorTest值个数 通过values()方法将ColorTest转换成一个数组,获取其个数*/

        System.out.println("4.1. ColorTest值有" + ColorTest.values().length + "个");

        

        /*4.2.ordinal()获取索引位置 起始值为:0*/

        System.out.println("4.2. RED所在位置是:" + ColorTest.RED.ordinal());

        

        /*4.3.枚举默认实现了java.lang.Comparable接口,-1之前,0位置相同,1之后*/

        System.out.println("4.3.   " + ColorTest.RED.compareTo(ColorTest.GREEN));

        

        /*4.4. 字符串转换成枚举类型  valueOf*/

        ColorTest ct = ColorTest.valueOf("RED");

        System.out.println("4.4.RED class类:" + ct.getClass());

        try {

            System.out.println("4.4.red class类:" + ColorTest.valueOf("red"));

        } catch (Exception e) {

            e.printStackTrace();

        }

        

        /*equal()方法*/

        System.out.println("4.5. " + "RED".equals(ColorTest.RED));

        

    }

}

运行结果:







参考代码:

package test.ENum;

public class ColorEnumTest {

public enum ColorTest{
RED,GREEN,BLANK
}

public static void main(String[] args) {
//1.输入枚举名
System.out.println("1.    " + ColorTest.RED);

//2.枚举与switch的结合使用,遍历ColorTest选中的数据
ColorTest test = ColorTest.RED;
switch (test) {
case RED:
System.out.println("2.是RED");
break;
case GREEN:
System.out.println("2.是GREEN");
break;
case BLANK:
System.out.println("2.是BLANK");
break;
default:
break;
}

//3.枚举与for循环的结合使用,通过values获取所有值
for(ColorTest ct : ColorTest.values()){
System.out.println("3.本次打印的颜色是:" + ct);
}

//4.枚举常用方法

/*4.1.获取ColorTest值个数 通过values()方法将ColorTest转换成一个数组,获取其个数*/
System.out.println("4.1. ColorTest值有" + ColorTest.values().length + "个");

/*4.2.ordinal()获取索引位置 起始值为:0*/
System.out.println("4.2. RED所在位置是:" + ColorTest.RED.ordinal());

/*4.3.枚举默认实现了java.lang.Comparable接口,-1之前,0位置相同,1之后*/
System.out.println("4.3.   " + ColorTest.RED.compareTo(ColorTest.GREEN));

/*4.4. 字符串转换成枚举类型  valueOf*/
ColorTest ct = ColorTest.valueOf("RED");
System.out.println("4.4.RED class类:" + ct.getClass());
try {
System.out.println("4.4.red class类:" + ColorTest.valueOf("red"));
} catch (Exception e) {
e.printStackTrace();
}

/*equal()方法*/
System.out.println("4.5. " + "RED".equals(ColorTest.RED));

}
}
package test.ENum;

import java.util.EnumMap;
import java.util.EnumSet;

public class ColorENumTest2 {

public enum ColorTest{
RED("红色"),GREEN(""),BLANK("白色");

// 定义私有变量
private String name ;
//构造方法必须为私有
private ColorTest(String name){
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

public static void main(String[] args) {
//1.遍历枚举类型
traversalEnum();
//2.EnumMap对象使用
testEnumMap();
//3.EnumSet使用
testEnumSet();
}

private static void traversalEnum() {
for(ColorTest ct : ColorTest.values()){
System.out.println("1. 当前颜色为:" + ct);
System.out.println("1. 当前颜色name为:" + ct.name);
System.out.println("1. 当前颜色所在位置为:" + ct.ordinal());
}
}

/*enumMap与其他map使用方式相似,不同的是enumMap的key是枚举类型,而非字符串*/
private static void testEnumMap() {
EnumMap enumMapTest = new EnumMap(ColorTest.class);
enumMapTest.put(ColorTest.RED, "红灯停");
enumMapTest.put(ColorTest.GREEN, "绿灯行");
enumMapTest.put(ColorTest.BLANK, "白灯你是要上天么?");

for(ColorTest ct : ColorTest.values()){
System.out.println("2. " + ct.name + " 对应的是:" + enumMapTest.get(ct));
}
}

private static void testEnumSet() {
EnumSet set = EnumSet.allOf(ColorTest.class);
System.out.println("3. set: " + set);
for (ColorTest ct : set) {
System.out.println("3. " + ct);
}
}

}


案例二:普通类中,定义enum类和enum的构造函数

案例代码:

package test.ENum;

import java.util.EnumMap;

import java.util.EnumSet;

public class ColorENumTest2 {

    

    public enum ColorTest{

        RED("红色"),GREEN(""),BLANK("白色");

        

        // 定义私有变量  

        private String name ;

        //构造方法必须为私有

        private ColorTest(String name){

            this.name = name;

        }

        public String getName() {

            return name;

        }

        public void setName(String name) {

            this.name = name;

        }

        

    }

    

    public static void main(String[] args) {

        //1.遍历枚举类型

        traversalEnum();

        //2.EnumMap对象使用

        testEnumMap();

        //3.EnumSet使用

        testEnumSet();

    }

    private static void traversalEnum() {

        for(ColorTest ct : ColorTest.values()){

            System.out.println("1. 当前颜色为:" + ct);

            System.out.println("1. 当前颜色name为:" + ct.name);

            System.out.println("1. 当前颜色所在位置为:" + ct.ordinal());

        }

    }

    

    /*enumMap与其他map使用方式相似,不同的是enumMap的key是枚举类型,而非字符串*/

    private static void testEnumMap() {

        EnumMap<ColorTest, String> enumMapTest = new EnumMap<ColorTest,String>(ColorTest.class);

        enumMapTest.put(ColorTest.RED, "红灯停");

        enumMapTest.put(ColorTest.GREEN, "绿灯行");

        enumMapTest.put(ColorTest.BLANK, "白灯你是要上天么?");

        

        for(ColorTest ct : ColorTest.values()){

            System.out.println("2. " + ct.name + " 对应的是:" + enumMapTest.get(ct));

        }

    }

    

    

    private static void testEnumSet() {

        EnumSet<ColorTest> set = EnumSet.allOf(ColorTest.class);

        System.out.println("3. set: " + set);

        for (ColorTest ct : set) {

            System.out.println("3. " + ct);

        }

    }

    

}

运行结果:








案例三:单独的enum类

enum类代码:

package test.ENum;

public enum Colorr {

    RED("红色",1),GREEN("绿色",2),BLANK("白色",3),BLUE("蓝色",4);

    

    private String name;

    private int index;

    

    private Colorr(String name,int index){

        this.name = name;

        this.index = index;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getIndex() {

        return index;

    }

    public void setIndex(int index) {

        this.index = index;

    }

    

}

普通java类代码:


package test.ENum;

public class ENumTest {

    public static void main(String[] args) {

        System.out.println(Colorr.RED);

         showColor(Colorr.RED);

    }

    private static void showColor(Colorr color) {

         switch (color) {

            case BLANK:

                System.out.println(color);

                break;

            case RED:

                System.out.println(color);

                break;

            default:

                System.out.println(color);

                break;

         }

        

    }

}

运行结果:











参考博客地址:http://blog.csdn.net/sup_heaven/article/details/35295851

参考博客地址:http://blog.csdn.net/sup_heaven/article/details/35559117

参考博客地址:http://blog.csdn.net/sup_heaven/article/details/35295851

参考博客地址:http://www.cnblogs.com/hyl8218/p/5088287.html

参考博客地址:http://mangocool.com/detail_1_1432712967939.html

参考书籍:Java核心技术 卷1 基础知识 第9版
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息