关于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); } } }