mzy对于枚举的理解

关于enum,其实就是简化了的class,功能就是提供一个个独立的、特定含义的常量!

在JDK5.0之前我们想模拟enum的功能,只能使用自定义类的形式:

1.首先私有化构造方法,让外部不能new对象

2.在类内部new多个final的成员变量,让每个成员变量代表特殊含义(可以私有一个带参数的构造方法,提供一个私有属性,对外提供一个get方法)。

如下:

class Score {
	private String s;
	private Score(String s) {
		this.s = s;
	} // 私有化构造方法,不能让用户随意构造对象,固定了四个等级
	
	public String getS() {
		return s;
	}
	public static final Score A = new Score("100-90"); 
	public static final Score B = new Score("89-80");
	public static final Score C = new Score("79-70");
	public static final Score D = new Score("69-60");
	public static final Score E = new Score("59-0");
	@Override
	public String toString() {
		return "" + s + "";
	}
	
}

在JDK5.0之后,enum的的出现,更加的灵活:

这里的A、B、C... 对应上面理解就比较容易了!

enum Score {
	A("100-90"), B("89-80"), C("79-70"), D("69-60"), E("59-0");
	private String s; // 分数段
	private Score(String s) {
		this.s = s;
	}
	public String getS() {
		return s;
	}
	// enum不能重写toString
}

同时,enum提供一个values方法,可以同时获得所有的属性!

package b_enum;
/**
 * 发现一个有意思的事情,在所有花括号后面加分号都不会报错!
 * 发现其实是可以加分号的,但是我们习惯省略了,因为花括号就已经是一个整体;
 * 是一段独立的内容了!
 * 所以一般我们省略分号,并不会这样去写:main() {}; class Test{};
 * @author mzy
 */
public class Demo01 {
	/*
	 *  打印成绩:要求成绩等级 A B C D E
	 *  只能是这个范围内的,不能有这五个等级之外的字母
	 *  JDK5之前我们只能通过自定义类的形式:私有化构造来实现
	 */
	public static void main(String[] args) {
		// System.out.println(Score.A.getS());
		// System.out.println(Score.B.getS());
		Score[] values = Score.values();
		for(Score score : values) {
			System.out.println(score);
		}
	}
}


posted @ 2018-05-22 19:33  五彩世界  阅读(144)  评论(0编辑  收藏  举报