15.枚举

枚举

枚举是Java1.5引入的新特性,通过关键字enum来定义枚举类。枚举类是一种特殊类,它和普通类一样可以使用构造方法、定义成员变量和方法,也能实现接口,但枚举类不能继承其他类。枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。

一、声明枚举

声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。

//声明性别枚举
public enum SexEnmu {
	man,woman;

}

任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。
注意:如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。

二、使用枚举

可以通过枚举类型名直接引用常量。

public static void main(String[] args) {
		System.out.println(SexEnmu.man);
	}

三、枚举的常用方法

values() :该方法可以将枚举类型成员以数组的形式返回。

public enum Test_enum {

	SPRING, SUMMER, AUTUMN, WINTER;
}
public static void main (String[] args) {
		Test_enum[] t=Test_enum.values();
		for (int i = 0; i < t.length; i++) {
			System.out.println(t[i]);
		}
	}

15.枚举_第1张图片

三、枚举的常用方法

values() :该方法可以将枚举类型成员以数组的形式返回。

public enum Test_enum {

	SPRING, SUMMER, AUTUMN, WINTER;
}
public static void main (String[] args) {
		Test_enum[] t=Test_enum.values();
		for (int i = 0; i < t.length; i++) {
			System.out.println(t[i]);
		}
	}

15.枚举_第2张图片
valueOf()与compareTo():枚举类型中静态方法valueOf()可以实现将普通字符串转换为枚举实例,而compareTo()方法用于比较两个枚举对象在定义时的顺序。

public enum Test_enum {

	SPRING, SUMMER, AUTUMN, WINTER;
}
public static void main (String[] args) {
		
		Test_enum te=Test_enum.valueOf("SUMMER");
		System.out.println(te.compareTo(Test_enum.valueOf("SPRING")));
		System.out.println(te.compareTo(Test_enum.valueOf("SUMMER")));
		System.out.println(te.compareTo(Test_enum.valueOf("AUTUMN")));
	}

15.枚举_第3张图片
说明:调用compareTo()方法返回的结果,正值代表方法中的参数在调用该方法的枚举对象位置之前;0代表两个相互比较的枚举成员的位置相同;负值代表方法中参数在调用该方法的枚举对象位置之后。
ordinal():该方法用于得到枚举成员的位置索引。

public enum Test_enum {

	SPRING, SUMMER, AUTUMN, WINTER;
}
public static void main (String[] args) {
		Test_enum[] t=Test_enum.values();
		for (int i = 0; i < t.length; i++) {
			System.out.println(t[i]+"的索引位置"+t[i].ordinal());
		}
}

15.枚举_第4张图片

四、枚举的特点

枚举类型声明提供了一种用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值。总结枚举类型,它具有以下特点:

  • 类型安全。
  • 紧凑有效的数据定义。
  • 可以和程序其他部分完美交互。
  • 运行效率高。

五、枚举的应用

枚举在switch中的应用:在枚举类型中,因枚举的内容元素是常量,所以可以应用到switch语句中。

public enum dome_enum {

	星期一,
	星期二,
	星期三,
	星期四,
	星期五,
	星期六,
}
public static void main(String[] args) {
		dome_enum de=dome_enum.星期一;
		switch (de) {
		case 星期一:
			break;
		case 星期二:
			break;
		case 星期三:
			break;
		case 星期四:
			break;
		case 星期五:
			break;
		case 星期六:
			break;
		default:
			break;
		}
	}

枚举中的构造方法:在枚举类型中,可以添加构造方法,但是规定这个构造方法必须为private修饰符修饰。

public enum Test_enum {

	SPRING(1,"春天"), SUMMER(2,"夏天"), AUTUMN(3,"秋天"), WINTER(4,"冬天");
	
	private int id;
	private String name;
	
	
	private Test_enum() {
	}


	private Test_enum(int id, String name) {
		this.id = id;
		this.name = name;
	}


	public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}


	public String getName() {
		return name;
	}


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

public static void main (String[] args) {
		Test_enum[] t=Test_enum.values();
		for (int i = 0; i < t.length; i++) {
			System.out.println(t[i].getId()+"的名称"+t[i].getName());
		}
}

15.枚举_第5张图片
枚举中实现接口:枚举是一种特殊的类,那么它可以实现接口,并且每个元素都可以实现接口中的方法。

public interface IEnumService {

	public void say();
}

public enum Test_enum implements IEnumService{

	SPRING{
		public void say() {
			System.out.println("我是春天");
		}
	}, 
	SUMMER{
		public void say() {
			System.out.println("我是夏天");
		}
	}, 
	AUTUMN{
		public void say() {
			System.out.println("我是秋天");
		}
	}, 
	WINTER{
		public void say() {
			System.out.println("我是冬天");
		}
	};

	
}


public static void main (String[] args) {
		Test_enum[] t=Test_enum.values();
		for (int i = 0; i < t.length; i++) {
			t[i].say();
		}
}

15.枚举_第6张图片

六、枚举的用途

枚举中存储的常量,因其独有的特性,能够完成固定的内容的描述,比如一年有四季,一天有24小时,常应用于比如错误码,信息码等。同时,枚举还可以实现接口,常用于固定接口的不同类型不同处理的情况。

你可能感兴趣的:(Java,SE,java,c++,开发语言)