Java 枚举

Posted 王睿丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 枚举相关的知识,希望对你有一定的参考价值。

1、简单实现枚举 并与 静态内部类进行对比

/**
 * 简单实现枚举 并与 静态内部类进行对比
 * @author wangrui
 *
 */

//枚举类
enum Color{
	//枚举类的元素可以不写分号,如果枚举类中还包含其他成员变量、成员方法,则需要加上 ;
	RED,GREEN,BLUE
}
public class Main1 {

	public static void main(String[] args) {
		//枚举实现颜色
		Color c = Color.RED;
		System.out.println(c);
		
		//静态内部类实现颜色
		System.out.println(Colorm.RED);
	}
}

class Colorm{
	public static String RED="RED";
	public static String GREEN="GREEN";
	public static String BLUE="BLUE";
}

结果

RED
RED

2、枚举类声明在类的内部

/**
 * 1、枚举类可以声明在类的内部
 * 2、枚举类转换为类
 * @author wangrui
 *
 */



public  class Main2 {
	//枚举内部类
	enum Color2
	{
	    RED, GREEN, BLUE;
	}
	/*
	每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。
	以上的枚举类 Color 转化在内部类实现
	static class Color{
	     public static final Color RED = new Color();
	     public static final Color BLUE = new Color();
	     public static final Color GREEN = new Color();
	} 		*/

	public static void main(String[] args) {
		Color2 c = Color2.RED;
		System.out.println(c);
	}
	
}

结果

RED

3、迭代枚举元素

/**
 * 迭代枚举元素
 * @author wangrui
 *
 */
public class Main3 {

	public static void main(String[] args) {
		//迭代枚举元素
		for(Color3 myEnum:Color3.values()) {
			System.out.println(myEnum);
		}
	}
	
}

//枚举类
enum Color3{
	RED,GREEN,BLUE;
}

结果

RED
GREEN
BLUE

4、枚举与switch 配合

/**
 * 枚举与switch 配合
 * @author wangrui
 *
 */

enum Color4{
	RED,GREEN,BLUE
}

public class Main4 {
	
	public static void main(String[] args) {
		Color4 myEnum = Color4.GREEN;
		//疑问:为什么枚举类型的元素可以直接在不同类中直接使用,如下面的:case RED
		switch(myEnum) {
		case RED:	System.out.println("红色");	break;
		case GREEN:	System.out.println("绿色");  break;
		case BLUE:  System.out.println("蓝色");  break;
		}
	}
}

结果

绿色

5、values(), ordinal() 和 valueOf() 方法

/**
 * values(), ordinal() 和 valueOf() 方法
 * @author wangrui
 *
 */
public class Main5 {
	public static void main(String[] args) {
		//获取枚举中所有的元素
		Color5[] arr = Color5.values();
		//迭代枚举
		for(Color5 c:arr) {
			//获取每一个元素及它的索引
			System.out.println(c  +  "---它的索引是:" + c.ordinal());
		}
		
		//使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException
		System.out.println(Color5.valueOf("RED"));
//		System.out.println(Color5.valueOf("BLACK"));
		
	}
}

enum Color5{
	RED,GREEN,BLUE
}

结果

RED---它的索引是:0
GREEN---它的索引是:1
BLUE---它的索引是:2
RED

6、枚举类成员

/**
 * 枚举类成员
 * @author wangrui
 *
 */

//枚举类
enum Color6{
	RED,GREEN,BLUE,WHILE;		//△这里下面还有其他枚举成员,所以需要加上分号
	
	//△构造函数只能使用 private 访问修饰符,外部无法调用
	private Color6() {
		System.out.println("构造方法调用处:" + this.toString());
	}
	
	public void colorInfo() {
		System.out.println("通用色");
	}
	
}

public class Main6 {
	public static void main(String[] args) {
		//结论:枚举类在实例化的时候,会自动调用内部构造方法,并且会把所有元素遍历一遍
		Color6 c = Color6.RED;
		//打印c的颜色
		System.out.println(c);
		//打印枚举类颜色信息
		c.colorInfo();
	}
}

结果

构造方法调用处:RED
构造方法调用处:GREEN
构造方法调用处:BLUE
构造方法调用处:WHILE
RED
通用色

以上是关于Java 枚举的主要内容,如果未能解决你的问题,请参考以下文章

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]

Java 枚举类的基本使用

PAT1049-----枚举法,找规律题,注意降低时间复杂度

java代码在片段活动中不起作用

java 代码片段【JAVA】

# Java 常用代码片段