【JAVA】enum类详解

目录

一、简介

二、默认枚举类

三、多值枚举对象

四、属性和方法

五、构造函数

六、重要方法

七、参考文献


一、简介

    1、枚举类代表一组常量;
    2、枚举常量隐性声明为final static类型;
    3、每一个枚举常量代表了一个枚举类的对象;
    4、枚举类隐性实现了java.lang.Comparable接口和java.io.Serializable接口
    5、枚举类可以包涵多个构造函数

二、默认枚举类

    枚举类首先定义常量,其次才是属性、构造函数和方法。(注:常量名要大写)

         //创建默认枚举类
	 public enum DefaultEnum {
		DEMOENUM1, DEMOENUM2, DEMOENUM3;
	}
	
	//访问枚举对象
	public class client {
		public static void main(String[] args) {
			DefaultEnum demoEnum = DefaultEnum.DEMOENUM1;
			System.out.println(demoEnum);//输出:DEMOENUM1
		}
	}

三、多值枚举对象

    枚举对象可以包涵一个或多个值,值的类型可以任意基本类型。枚举对象的值在枚举类中定义后可定义setter方法修改,但是如非必要不要这么做,因为这会违背枚举对象常量的本质。

	//创建枚举类
	public enum MutiValueEnum {
	
		DEMOENUM1(1, "hello"),
		DEMOENUM2(2, "enum");
		
		//枚举对象的变量
		private int id;
		private String value;
		
		//重写枚举类的默认构造器
		MutiValueEnum(int id, String value) {
			this.id = id;
			this.value = value;
		}
		
		//获得id属性的值
		public int getId() { return this.id; }
		
		//获得value属性的值
		public String getValue() { return this.value; }
	}
	
	//访问枚举对象
	public class client {
		public static void main(String[] args) {
			MutiValueEnum mutiValueEnum = MutiValueEnum.DEMOENUM1;
			
			System.out.println(mutiValueEnum);//输出:DEMOENUM1
			System.out.println(mutiValueEnum.getId());//输出:1
			System.out.println(mutiValueEnum.getValue());//输出:hello
		}
	}

四、属性和方法

    枚举类里的属性和方法是属于枚举常量的,所以枚举常量可以调用这些方法。我们可以在枚举类定义其他我们所需要的方法。其实,枚举类同正常类有许多相似之处,对于变量和方法,我们可以按照正常类里的属性和方法去使用,只不过我们不能通过new来创建对象,而是枚举类自行创建。注:枚举类里不能有抽象方法。
  

	//测试枚举类的属性和方法
	public enum TestAttributeAndMethodOfEnum {
		DEMOENUM;
		
		private int id;
		private String value;
		private boolean flag;
		
		//setter and getter
		…
		
		//other method
		public void TestMethod1() { … }
		public void TestMethod2() { … }
	
	}
	
	//测试类
	public class Client {
		public static void main(String[] args) {
			TestAttributeAndMethodOfEnum testEnum = TestAttributeAndMethodOfEnum.DEMOENUM;
			
			testEnum.setId(1);
			testEnum.TestMethod1();
			…
		}
	
	}

五、构造函数

    同正常类一样,枚举类可以拥有多个构造函数。构造函数的参数要同枚举常量的值的数量相一致。并且枚举类的构造函数的可见性只能设为包可见或是私有,其次也不能通过new来创建枚举对象。由枚举类的使用类负责枚举对象的构建。

	enum Color 
	{ 
		RED, 
		GREEN("light"),
		BLUE(255,23,223); 
		
		private String level;
		private int r,g,b;
		
		//默认无参构造,在此可省略
		//Color() { }
		
		//对应一个值的GREEN常量
		Color(String level) {
			this.level = level;
		}
		//对应三个值的BLUE常量
		Color(int r, int g, int b) {
			this.r = r;
			this.g = g;
			this.b = b;
		}
	} 
	public class Test 
	{
		// Driver method 
		public static void main(String[] args) 
		{ 
			Color c1 = Color.RED; 
			Color c2 = Color.GREEN;
			Color c3 = Color.BLUE;
			System.out.println(c1); 
			…
		} 
	}
	在上述例子中,枚举类会被内部的转换为
	class Color
        {
             public static final Color RED = new Color();
             public static final Color GREEN = new Color("light");
             public static final Color BLUE = new Color(255, 23, 223);
        }

六、重要方法

    values()                            返回枚举类的所有常量;
    ordinal()                           返回枚举常量的序号
    valueOf(String name)      返回名为name的枚举常量,如果存在。

	// 演示 values(), ordinal() 和 valueOf() 方法
	enum Color 
	{ 
		RED, GREEN, BLUE; 
	} 
	
	public class Test 
	{ 
		public static void main(String[] args) 
		{ 
			Color arr[] = Color.values(); 
	
			for (Color col : arr) 
			{ 
				System.out.println(col + " at index "
								+ col.ordinal()); 
			} 
	
			System.out.println(Color.valueOf("RED"));
			//此行代码会返回IllegalArgumentException 异常,因为Color枚举类里没有名为WHITE的常量
			System.out.println(Color.valueOf("WHITE")); 
		} 
	} 

七、参考文献

    https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
    https://www.geeksforgeeks.org/enum-in-java/
    https://dzone.com/articles/java-enums-how-to-make-much-more-useful
    https://stackoverflow.com/questions/19600684/java-enum-with-multiple-value-types
    https://docs.oracle.com/javase/8/docs/api/

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值