zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java 枚举

JAVA 枚举
2023-09-14 09:04:25 时间

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
通用色