文章目录
一、枚举类
类的对象只有有限个, 确定的. 我们称此类为枚举类.
说明:
- 类的对象只有有限个,确定的。如:
- 星期:Monday(星期一)、…、Sunday(星期天)
- 性别:Man(男)、Woman(女) 季节:Spring(春节)…Winter(冬天)
- 支付方式:Cash(现金)、WeChatPay(微信)、Alipay(支付宝)、BankCard(银 行卡)、CreditCard(信用卡)
- 就职状态:Busy、Free、Vocation、Dimission
- 订单状态:Nonpayment(未付款)、Paid(已付款)、Delivered(已发货)、 Return(退货)、Checked(已确认)Fulfilled(已配货)
- 线程状态:创建、就绪、运行、阻塞、死亡
- 当需要定义一组常量时,强烈建议使用枚举类。
- 若枚举只有一个对象, 则可以作为一种单例模式的实现方式。
枚举类的实现:
- JDK1.5之前需要自定义枚举类。
- JDK 1.5 新增的 enum 关键字用于定义枚举类。
枚举类的属性:
- 枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰。
- 枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。
- 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的 传入参数。
① 自定义枚举类
通过自己写一个自定义的类来实现自定义枚举类。
自定义枚举类的实现:
-
私有化类的构造器,保证不能在类的外部创建其对象。
-
在类的内部创建枚举类的实例。声明为:public static final。
-
对象如果有实例变量,应该声明为private final,并在构造器中初始化。
Demo:
package com.broky.EnumClass;
/**
* 自定义枚举类
*
* @author 13roky
* @date 2021-05-13 17:16
*/
public class SeasonTest {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
}
}
// 自定义枚举类
class Season{
// 1. 声明 Season 对象的属性
// 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 final 的
public static Season SPRING = new Season("春天","春暖花开");
public static Season SUMMER = new Season("夏天","夏日炎炎");
public static Season AUTUMN = new Season("秋天","秋高气爽");
public static Season WINTER = new Season("冬天","冰天雪地");
// 4. 其它诉求1 : 获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
// 5. 其他诉求2 : 提供toString()
@Override
public String toString() {
return "Season{" + "seasonName='" + seasonName + '\'' + ", seasonDesc='" + seasonDesc + '\'' + '}';
}
}
② enum关键字定义枚举类
通过使用enum关键字,和一些简便的规则,更方便枚举类的创建
说明:
- enum 枚举类是继承 java.lang.Enum 类的,所以其中如果不重写 toString 使用的是 java.lang.Enum 中的 toString,不会输出内存地址,而是会打印对象名
enum 枚举类的实现:
-
使用
enum
声明类为枚举类。 -
在枚举类的开头首先定义枚举类中所需要的对象。
-
枚举类对实例化枚举类的对象做了简化
只需要使用 对象名(参数···) 就可以完成实例化,如:
PRING("春天", "春暖花开"), WINTER("冬天", "冰天雪地");
多个对象用 “,” 隔开,最后一个以 “;” 结尾
如果没有属性,可以去掉括号,如:
PRING, WINTER;
-
-
其余规则均与自定义枚举类相同。
Demo:
package com.broky.EnumClass;
/**
* @author 13roky
* @date 2021-05-13 18:32
*/
public class SeasonTest1 {
public static void main(String[] args) {
Season1 spring = Season1.SPRING;
System.out.println(spring);
System.out.println(Season1.class.getSuperclass());
}
}
enum Season1 {
// 1. 提供当前枚举类的对象, 多个对象之间用","隔开, 末尾对象用";"结束
SPRING("春天", "春暖花开"),
SUMMER("夏天", "夏日炎炎"),
AUTUMN("秋天", "秋高气爽"),
WINTER("冬天", "冰天雪地");
// 2. 声明 Season 对象的属性 : private final 修饰
private final String seasonName;
private final String seasonDesc;
// 3.