Java 枚举类的使用
JDK 5.0 之前
/**
*
* 一、枚举类的使用
* 1 枚举类的理解: 类的对象只有有限的,确定的。我们称此类为枚举类
* 2 当需要定义一组常量时,强烈建议使用枚举类
* 3 如果枚举类中只有一个对象,则可以看作是单例模式的实现方式
*
*
*/
public class EnumerateTest {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
}
}
class Season{
// 1 声明Season对象的属性: private final修饰
private final String seasonName;
private final String seasonDesc;
// 2 私有化类的构造器,并给对象属性赋值
private Season(String seansonName, String seasonDesc){
this.seasonName = seansonName;
this.seasonDesc = seasonDesc;
}
// 3 提供当前枚举类的多个对象: public static final
public static final Season SPRING = new Season("春天","春暖花开");
public static final Season SUMMER = new Season("夏天","炎炎夏日");
public static final Season AUTUMN= new Season("秋天","秋意盎然");
public static final Season WINTER= new Season("冬天","大雪皑皑");
// 4 其他诉求: 获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
// 4 其他诉求1: toString的方法
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
JDK 5.0 之后
Enum关键字
/**
*
* 使用enum关键字定义枚举类
* 说明: 定义的枚举类默认继承与java.lang.Enum 类
*
* Enum类中的常用方法
* values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的 枚举值。
* valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符 串必须是枚举类对象的“名字”。如不是,会有运行时异常: IllegalArgumentException。
* toString():返回当前枚举类对象常量的名称
*
* 使用Enum关键字实现接口的情况
* 情况一: 实现接口
* 在类里直接重写,每个枚举类调用的重写的方法都是一样的
*
* 情况二: 如果想让每一个枚举类对应的重写的方法不一样
* 则 在每一个枚举类中 重写 该方法
*/
public class EnumerateTest1 {
public static void main(String[] args) {
Season1 Summer = Season1.SUMMER;
// toString 方法
System.out.println(Summer);
System.out.println("*********************");
Season1[] values = Season1.values();
for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
}
Thread.State[] states = Thread.State.values();
for (int i = 0; i < states.length; i++) {
System.out.println(states[i]);
}
//ValueOf(String objName): 返回枚举类中对象名是objName的对象。。
// 如果 找的对象不在枚举类中,则抛出异常IllegalArgumentException
Season1 winter = Season1.valueOf("WINTER");
System.out.println(winter);
winter.show();
}
}
//实现接口
interface Info{
void show();
}
// 使用enum 关键字定义枚举类
enum Season1 implements Info {
// 1 提供当前枚举类的多个对象
// 区别与自定义的枚举类, 在enum中 要首先声明枚举类的对象
// 定义的方式也不同,要吧public static final 类名 删除
// 然后对象之间用 , 号间隔。最后一个用分号结束。
SPRING ("春天","春暖花开"){
// 方式二
@Override
public void show() {
System.out.println(" showing Spring");
}
},
SUMMER ("夏天","炎炎夏日"){
@Override
public void show() {
System.out.println(" showing Summer");
}
},
AUTUMN ("秋天","秋意盎然"){
@Override
public void show() {
System.out.println(" showing Autumn");
}
},
WINTER ("冬天","大雪皑皑"){
@Override
public void show() {
System.out.println(" showing Winter ");
}
};
// 2 声明Season对象的属性: private final修饰
private final String seasonName;
private final String seasonDesc;
// 3 私有化类的构造器,并给对象属性赋值
private Season1(String seansonName, String seasonDesc){
this.seasonName = seansonName;
this.seasonDesc = seasonDesc;
}
// 4 其他诉求: 获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//方式一
// @Override
// public void show() {
// System.out.println("Override Show Method.....");
// }
}