/**
* 枚举类:类的对象是有限个的,确定的。那么就可以使用枚举类。
* 例如:定义一个Sex类,它的实例对象只有Man和Woman。
* 定义一个Week类,它的实例对象有Monday,Tuesday..Sunday。
*
* 在jdk1.5之前,我们需要自定义枚举类
* 在jdk1.5之后,使用enum关键字来定义枚举类。
*
* 自定义枚举类
*/
public class SexEnum {
// 1.定义对象的属性,因为是枚举类,所以对象的属性都应该确定的,不可以被修改的,所以使用final关键字。
private final String sexName;
private final String sexDesc;
// 2.枚举类的每个对象的属性值都不相同,所以需要在构造方法中初始化每个属性,
// 此构造方法需要使用private关键字修饰,避免暴露让外界访问。如果别人可
// 以随意构造枚举类的对象,那么枚举类的对象就无法满足 有限个的,确定的 条件。
private SexEnum(String sexName, String sexDesc) {
this.sexName = sexName;
this.sexDesc = sexDesc;
}
// 3.提供当前枚举类的多个对象,因为提供给外界访问,所以使用public权限修饰符。
// 因为枚举类的对象是确定的,有限个的,所以使用static final将它们定义为常量。
public static final SexEnum MAN = new SexEnum("man", "男性");
public static final SexEnum WOMAN = new SexEnum("woman", "女性");
// 4.提供公共的getter方法来让外界获取枚举对象的属性
public String getSexName() {
return sexName;
}
public String getSexDesc() {
return sexDesc;
}
}
class SexTest {
public static void main(String[] args) {
SexEnum sexEnum = SexEnum.MAN;
System.out.println(sexEnum.getSexName());
System.out.println(sexEnum.getSexDesc());
}
}
/**
* 使用enum关键字定义枚举类。
* 我们可以使用valuesOf和values方法来获取枚举类对象。
*/
public enum SexEnum {
/*
public static final SexEnum MAN = new SexEnum("man", "男性");
public static final SexEnum WOMAN = new SexEnum("woman", "女性");
对比自定义枚举类,可以看到下面的步骤省略了public static final SexEnum 和 new SexEnum。这些都是固定写法,所以可以省略。
同时提供多个枚举类对象的这一步操作必须放在最前面,多个对象使用,分割 使用;结束。
*/
MAN("man", "男性"),
WOMAN("woman", "女性");
private final String sexName;
private final String sexDesc;
private SexEnum(String sexName, String sexDesc) {
this.sexName = sexName;
this.sexDesc = sexDesc;
}
public String getSexName() {
return sexName;
}
public String getSexDesc() {
return sexDesc;
}
}
class SexTest {
public static void main(String[] args) {
// 使用valueOf根据对象名来获取对象实例。
SexEnum sexEnum = SexEnum.valueOf("WOMAN");
System.out.println(sexEnum.getSexName());// woman
System.out.println(sexEnum.getSexDesc());// 女性
// 获取枚举类对象数组
SexEnum[] sexEnums = SexEnum.values();
for (SexEnum anEnum : sexEnums) {
// ...
}
}
}