JKD 5.0以前—自定义枚举类
以前的真的和类没啥区别,直接上代码,感觉没啥好说的。
public class EnumTest {
public static void main(String[] args) {
System.out.println(Season.SPRING.toString());
}
}
/*
自定义枚举类
*/
class Season{
//1.声明Season对象的属性:private final修饰
private final String seasonName;
private final String seasonDesc;
//2.私有化类的构造器,并给对象属性赋值
private Season(String seasonName,String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//3.提供当前枚举类的多个对象:public static fianl的
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.1其他方法
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//4.2提供ToString()
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
JDK 5.0以后—用enum关键字定义枚举类
常用方法:
- values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的常量。
- valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。 如不是,会有运行时异常:illegalArgumentException.
- toString();返回当前枚举类对象常量的名称。
规则:
- 一开始就提供当前枚举类的对象,必须省略public static fianl,以逗号隔开,最后一个分号。
- 声明当前枚举类的属性:private final修饰。
- 提供私有化的有参构造器,并赋值。
- 可以放抽象方法等等,前面的对象记得实现。
- 可以提供其他方法getter()、toString(),看自己需求。
特殊情况----实现接口在enum类中实现抽象方法:
interface showInfo{
void show();
}
public class EnumTest1 {
public static void main(String[] args) {
//调用ToString方法,没重写则为SPRING
System.out.println(Season1.SPRING);
//调用values()
Season1[] values = Season1.values();
for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
}
//调用valueOf(String objName):返回枚举类型中对象名是ObjName的对象
Season1 spring = Season1.valueOf("SPRING");
System.out.println(spring);
//调用重写的方法show()
Season1.SPRING.show();
}
}
enum Season1 implements showInfo{
//隐式父类不为Object,为Enum,不重写默认打印对象名,例如SPRING
//提供当前类的枚举对象,多个之间用","隔开
SPRING("春天", "春暖花开"){
@Override
public void show() {
System.out.println("春天是适合播种的季节");
}
},
SUMMER("夏天", "夏日炎炎"){
@Override
public void show() {
System.out.println("夏天是适合游泳的季节");
}
},
AUTUMN("秋天", "秋高气爽"){
@Override
public void show() {
System.out.println("秋天是适合收获的季节");
}
},
WINTER("冬天", "冰天雪地"){
@Override
public void show() {
System.out.println("冬天是适合睡觉的季节");
}
};
//1.声明Season对象的属性:private final修饰
private final String seasonName;
private final String seasonDesc;
//2.私有化类的构造器,并给对象属性赋值
private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.1其他方法
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//4.2提供ToString(),不重写则使用Enum中的ToString()方法打印对象名(SPRING)
@Override
public String toString() {
return "Season1{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
// @Override
// public void show() {
// System.out.println("这是一个季节");//这种没什么好说的
// }
}