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

最近把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版

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值