Java---枚举学习

废话不说,先创建一个enums的枚举‘类’

看栗子:

package enums;
/*
 * enum:凡是使用enum修饰的都为枚举  属性的集合 进行一一成列出来
 * 枚举中的变量全部都是常量  
 * 为什么要定义枚举?
 * 因为定义属性需要确定类型,定义枚举不需要定义类型 默认为常量
 * 
 * 首先定义枚举一定要先赋值  然后在定义变量 ,否者报错
 * 在枚举中可以直接定义汉字(字符串) 拼音   数字之类的内容 进行赋值  
 * 
 * 枚举不是类,也不是接口,枚举可以理解为常量或数组  但是它并不是对象
 * 枚举中可以属性,可以定义构造方法(必须为私有化)和普通方法 还可以定义抽象方法
 * 抽象方法可以直接定义在枚举中
 * 枚举中可以定义getter  setter 方法  以及toString方法
 * 
 * 若枚举中定义英文的常量 需要全部大写
 * 
 *枚举可以实现接口,一旦实现接口就必须重写接口中定义的抽象方法
 * 
 */
public enum Week {
	星期一("Monday",1),星期二("Tuesday",2),星期三("Wednesday",3),星期四("Thursday",4),
	星期五("Friday",5),星期六("Saturday",6),星期日("Sunday",7);
	private String desc;
	private int num;
	//有参构造方法
	private Week(String desc,int num){
		this.desc = desc;
		this.num = num;
	}
	//无参构造方法
	private Week(){}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	
//	public String toString(){
//		return desc+","+num;
//	}
//	
	
	
	public void test(){
		//System.out.println(desc);
		//swicth  int byte  short  char    将枚举的结果定义为整数常量(final int)
		switch (星期二) {
		case 星期一:System.out.println("今天周一");break;
		case 星期二:System.out.println("今天周二");break;
		case 星期三:System.out.println("今天周三");break;
		case 星期四:System.out.println("今天周四");break;
		case 星期五:System.out.println("今天周五");break;
		case 星期六:System.out.println("今天周六");break;
		case 星期日:System.out.println("今天周日");break;
			

		
		}
	}
}

实现:

package enums;

public class Test {

	public static void main(String[] args) {
		for(Week w:Week.values()){//Week枚举‘类’是静态的,因此直接Class.Week调用就是了
			System.out.println(w);//打印所有枚举常量名
			System.out.println(w.getDesc());//打印Week‘类’中的Desc属性值
			System.out.println(w.getNum());//打印Week‘类’中的Num属性值
		}
}

enum这个关键字,可以理解为跟class差不多,这也个单独的类。可以看到,上面的例子里面有属性,有构造方法,有getter,也可以有setter,但是一般都是构造传参数。还有其他自定义方法。那么在这些东西前面的,以逗号隔开的,最后以分号结尾的,这部分叫做,这个枚举的实例。也可以理解为,class  new 出来的实例对象。这下就好理解了。只是,class,new对象,可以自己随便new,想几个就几个,而这个enum关键字,他就不行,他的实例对象,只能在这个enum里面体现。也就是说,他对应的实例是有限的。这也就是枚举的好处了,限制了某些东西的范围,举个栗子:一年四季,只能有春夏秋冬,你要是字符串表示的话,那就海了去了,但是,要用枚举类型的话,你在enum的大括号里面把所有的选项,全列出来,那么这个季节的属性,对应的值,只能在里面挑。不能有其他的。




在某些情况下,一个类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例有限且固定的类,在 Java 中被称为枚举类;在 Java 中使用 enum 关键字来定义枚举类,其地位与 class、interface 相同;枚举类是一种特殊的类,它和普通的类一样,有自己的成员变量、成员方法、构造器 (只能使用 private 访问修饰符,所以无法从外部调用构造器,构造器只在构造枚举值时被调用);一个 Java 源文件中最多只能有一个 public 类型的枚举类,且该 Java 源文件的名字也必须和该枚举类的类名相同,这点和类是相同的;使用 enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口;所有的枚举值都是 public static final 的,且非抽象的枚举类不能再派生子类;枚举类的所有实例(枚举值)必须在枚举类的第一行显式地列出,否则这个枚举类将永远不能产生实例。列出这些实例(枚举值)时,系统会自动添加 public static final 修饰,无需程序员显式添加。
使用Java的枚举,让我们的可读性更高:

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。 

java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。


猜你喜欢

转载自blog.csdn.net/hu_belif/article/details/80631173