写在前面
本文仅仅作为个人的学习笔记,有不对的地方还请多多指点
自学java的第 … 天,加油突破自己
常常是最后一把钥匙打开了神殿门,不要失去信心,只要坚持不懈,就终会有结果的
什么是枚举
enumeration 简写 enum
枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。
枚举的两种实现
1.自定义枚举
2.enum 枚举类
1.自定义枚举
- 构造器私有化
- 本类内部创建一组对象[四个 春夏秋冬]
- 对外暴露对象(通过为对象添加 public final static
修饰符)- 可以提供 get 方法,但是不要提供 set
/**
* 往往是最后一把钥匙打开了神殿门,不要失去信心
* 只要坚持不懈,就终会有成功的
**/
public class Enum02 {
public static void main(String[] args) {
System.out.println(Season02.SPRING);
System.out.println(Season02.SUMMER);
System.out.println(Season02.AUTUMN );
System.out.println(Season02.WINTER );
}
}
class Season02 {
private String name;
private String depict; // 描述
// 在类的内部创建对象
public static final Season02 SPRING = new Season02("春天","温暖");
public static final Season02 SUMMER = new Season02("夏天","炎热");
public static final Season02 AUTUMN = new Season02("秋天","凉爽");
public static final Season02 WINTER = new Season02("冬天","寒冷");
// 1.将构造器私有
private Season02(String name, String depict) {
this.name = name;
this.depict = depict;
}
public String getName() {
return name;
}
public String getDepict() {
return depict;
}
@Override
public String toString() {
return "Season02{" +
"name='" + name + '\'' +
", depict='" + depict + '\'' +
'}';
}
}
2.enum关键字实现枚举
1) 当我们使用 enum 关键字开发一个枚举类时,默认会继承 Enum 类, 而且是一个 final 类
2) 传统的
public static final Season2 SPRING = new Season2(“春天”, “温暖”); 简化成
SPRING(“春天”, “温暖”),
3) 如果使用无参构造器 创建 枚举对象,则实参列表和小括号都可以省略
/**
* 加油!
* 往往是最后一把钥匙打开了神殿门,不要失去信心
* 只要坚持不懈,就终会有成功的
**/
public class Enum03 {
public static void main(String[] args) {
System.out.println(Season03.SPRING);
}
}
// 1.把 class 换为 enum
enum Season03 {
// 使用 enum 来实现枚举,要求将定义常量对象,写在最前面
// public static final Season02 SPRING = new Season02("春天","温暖");
// 2. public static final Season02 SPRING = new // Season02("春天","温暖"); 换为
// SPRING("春天","温暖") 常量名(参数列表)
SPRING("春天","温暖"),
SUMMER("夏天","炎热"),
AUTUMN("秋天","凉爽"),
// 如果使用无参构造器创建枚举对象,则实参列表和小括号可以省略
MAX;
private Season03() {
// 无参构造器
}
private String name;
private String depict;
private Season03(String name, String depict) {
this.name = name;
this.depict = depict;
}
public String getName() {
return name;
}
public String getDepict() {
return depict;
}
@Override
public String toString() {
return "Season02{" +
"name='" + name + '\'' +
", depict='" + depict + '\'' +
'}';
}
}
3.enum 常用方法
/**
* 加油!
* 往往是最后一把钥匙打开了神殿门,不要失去信心
* 只要坚持不懈,就终会有成功的
* 枚举方法
**/
public class EnumMethod {
public static void main(String[] args) {
// 1.toString:Enum 类已经重写过,返回是当前对象名
System.out.println(Season03.SUMMER); //Season02{name='夏天', depict='炎热'}
// 2.name:返回当前对象名(常量名),子类中不能重写
System.out.println(Season03.SUMMER.name()); // SUMMER
// 3.ordinal 返回当前对象的位置号,默认从 0 开始
System.out.println(Season03.AUTUMN.ordinal()); // 2
// 4.values 返回当前枚举类中所有常量
Season03[] values = Season03.values();
for (Season03 season : values) { // 增强 for
System.out.println(season);
// Season02{name='春天', depict='温暖'}
//Season02{name='夏天', depict='炎热'}
//Season02{name='秋天', depict='凉爽'}
}
// 5.valueOf:将字符串转换成枚举对象,要求字符串必须为已有常量名,否则报异常
System.out.println(Season03.valueOf("SPRING")); // Season02{name='春天', depict='温暖'}
// 6.compareTo: 比较两个枚举常量,比较的是编号
// Season03[0]----Season03[2]
System.out.println(Season03.AUTUMN.compareTo(Season03.SPRING)); // 后一个编号减前一个编号:2
}
}