1、介绍
package level2.myEnum;
import java.lang.Enum;
/**
* 1、枚举类:把具体对象一个一个列举出来的类,叫做枚举类
* 2、说明:
* 1) 枚举是一组常量的集合
* 3、实现
* 1) 自定义实现枚举
* 1、构造器私有化,防止直接new对象
* 2、在Season内部,直接创建一组对象
* 3、对外暴露对象,通过为对象添加 public final static 修饰符
* 4、去掉setXxx方法,防止属性被修改
* 2) 系统提供关键字:enum
* 4、说明
* 1) 当我们使用enum关键字开发一个枚举类时,默认继承Enum类,且本类是一个final类
* 2) 传统的 public static final Season SPRING = new Season("春天", "温暖") 直接使用
* 简化成:SPRING("春天", "温暖") --> 常量名(实参列表),根据实参列表的形式确定调用哪个构造器
* 3) 如果使用无参构造器 创建 枚举对象,则 实参列表 和 小括号都可省略
* 4) 当有多个枚举对象时,使用 ,间隔,最后用分号结尾
* 5) 枚举对象 必须放在 枚举类 的行首;
* 6) 使用关键字enum时,会隐式继承Enum类,我们可以使用Enum类的方法;
* 5、补充
* 1) 使用 enum 关键字后,就不能再继承其他类了,因为enum会隐式继承 Enum,而java是单继承机制
* 2) 枚举类和普通类一样,可以实现接口,如下形式:
* enum 类名 implements 接口1, 接口2{}
*
*/
public class MyEnum {
public static void main(String[] args) {
System.out.println(Season.SPRING.showDescription());
System.out.println(Season.SUMMER.showDescription());
System.out.println(Season.AUTUMN.showDescription());
System.out.println(Season.WINTER.showDescription());
System.out.println(Season01.SPRING.showDescription());
System.out.println(Season01.SUMMER.showDescription());
System.out.println(Season01.AUTUMN.showDescription());
System.out.println(Season01.WINTER.showDescription());
}
}
// 1. 自定义枚举实现
/*
1、构造器私有化,防止直接new对象
2、去掉setXxx方法,防止属性被修改
3、在Season内部,直接创建固定的对象
4、可以加入 final 修饰符 来进行优化
*/
class Season{
private String name;
private String description;
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("冬天", "寒冷");
public String showDescription(){
return this.getName() + " " + this.getDescription();
}
private Season(String name, String description) {
= name;
this.description = description;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
}
// 2、enum关键字实现枚举
enum Season01{
// 使用enum实现枚举类
// 1、public static final Season SPRING = new Season("春天", "温暖") 直接使用
// SPRING("春天", "温暖") --> 常量名(实参列表)
// 2、如果有多个常量(对象), 用逗号 , 间隔
// 3、如果使用enum实现枚举,要求将定义常量对象,写在最前边
// 4、语句结束,使用 ; 号
SPRING("春天", "温暖"),SUMMER("夏天", "炎热"),
AUTUMN("秋天", "凉爽"),WINTER("冬天", "寒冷"),
OTHER(); // 调用无参构造器
private String name;
private String description;
public String showDescription(){
return this.getName() + " " + this.getDescription();
}
private Season01() {
}
private Season01(String name, String description) {
= name;
this.description = description;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
}
2、方法
package level2.myEnum;
/** Enum类的方法
*
*/
public class EnumMethod {
public static void main(String[] args) {
Season02 summer = Season02.SUMMER;
// 1. name:输出枚举对象的名称/引用名 (注意 不是构造器中的name参数)
System.out.println(());
// 2. ordinal:输出该枚举对象的次序/编号,编号从0开始
System.out.println(summer.ordinal());
// 3. values:返回一个数组,该数组含有所有定义的枚举对象
Season02[] values = Season02.values();
for(Season02 seasons:values){ // 依次从数组中取出元素,赋值给seasons,若已经取完,则退出for
System.out.println(seasons);
}
// 4. valueOf:将字符串转换成枚举类型,要求字符串必须是已有的常量名,否则报异常
// 根据输入的字符串 "SPRING" 到 Season02 的枚举对象中查找
// 找到就返回对象,找不到就报错
Season02 spring = Season02.valueOf("SPRING");
System.out.println(spring);
// 4. compareTo:比较两个枚举常量,比较的是对象的编号
// 返回int: Season02.SUMMER编号 - Season02.WINTER编号
System.out.println(Season02.SUMMER.compareTo(Season02.WINTER));
}
}
enum Season02{
SPRING("春天", "温暖"),SUMMER("夏天", "炎热"),
AUTUMN("秋天", "凉爽"),WINTER("冬天", "寒冷");
private String name;
private String description;
public String showDescription(){
return this.getName() + " " + this.getDescription();
}
private Season02(String name, String description) {
= name;
this.description = description;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
}