枚举类(详解!!!)

        枚举类(Enum)是一种特殊的类,用于定义一组固定的常量。在Java中,枚举类使用enum关键字来定义。

特点:

  1. 枚举类的每个实例都是唯一的,且在编译时确定。

  2. 枚举类的实例可以直接通过类名访问,不需要创建实例。(因为实例对象是 public final static 修饰的)

  3. 枚举类可以有自己的方法和构造器。

  4. 枚举类默认继承自java.lang.Enum类,因此具有一些内置的方法,如toString()ordinal()compareTo()等。(注意:因为枚举类隐式地继承了java.lang.Enum类所以他不能继承其他类(单继承),但可以实现接口)

一、自定义枚举类:

步骤:

(1)构造器私有化

解释:不能从外部类直接创建枚举实例对象

(2)在本类内部创建对象并且对外暴露对象(创建对象用 public final static 修饰)
(4)可以提供 get 方法,但是不能提供 set 方法

解释:防止外部类直接对枚举类的属性进行修改

代码演示:(输出一年的季节)

public class Season {
    private String name;
    public final static Season season1 = new Season("春天");
    public final static Season season2 = new Season("夏天");
    public final static Season season3 = new Season("秋天");
    public final static Season season4 = new Season("冬天");
    private Season(String name){
        this.name=name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                '}';
    }
}
class Test{
    public static void main(String[] args) {
        System.out.println(Season.season1);
        System.out.println(Season.season2);
        System.out.println(Season.season3);
        System.out.println(Season.season4);
    }
}

结果如下:

Season{name='春天'}
Season{name='夏天'}
Season{name='秋天'}
Season{name='冬天'}

 二、使用enum关键字来定义

修改步骤:

(1)使用关键字 enum 替代 class
(2)public static final Season season1 = new Season("春天")直接用 SPRING("春天")代替 ,SPRING是常量名,括号是实参列表(即调用的构造器)
(3)如果有多个常量(对象),使用“,”号间隔即可
(4)如果使用enum来实现枚举,要求将定义常量对象写在最前面

修改后的代码:

public enum Season {
    SPRING("春天"),SUMMER("夏天"), AUTUMN("秋天"),WINTER("冬天");
    private String name;

     Season(String name){
        this.name=name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                '}';
    }
}
class Test{
    public static void main(String[] args) {
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
        System.out.println(Season.AUTUMN);
        System.out.println(Season.WINTER);
    }
}

结果和上面一样

解释

  1. 枚举常量的定义
    • 在枚举类中,枚举常量(如SPRING,SUMMER等)被自动声明为public static final的实例。
    • 每个枚举常量都是枚举类的一个唯一实例。(因为有final修饰)
  2. 枚举类的属性和方法
    • 枚举类可以包含属性、方法和构造函数。
    • 属性可以是实例变量,用于存储每个枚举常量的特定信息(如上面的name属性)。
    • 方法可以是实例方法,用于提供枚举常量的行为(如上面的toString方法)。
  3. 枚举类的构造函数
    • 枚举类的构造函数默认是私有的,这意味着你不能从外部类直接创建枚举实例。
    • 枚举常量是在枚举类被加载时自动实例化的,因此每个枚举常量都是单例的。
  4. 遍历枚举常量
    • 可以使用values()方法遍历枚举类的所有常量。
  5. 使用枚举类
    • 在代码中,可以通过枚举类名直接访问枚举常量。
    • 可以调用枚举常量的方法和属性。

注意事项:

1.在Java中,枚举类(enum)默认是final的,这意味着它们不能被继承。这是Java语言设计的一个特性,目的是确保枚举类的完整性和一致性。(枚举类的构造器是私有化的所以子类也无法调用父类的构造器)
2.如果使用无参构造器创建枚举对象,则小括号可以省略
3.枚举类不能继承其他类(因为枚举类隐式地继承了java.lang.Enum类),但可以实现接口(结合第一条:枚举类不能继承其他类也不能被其他类继承,只能实现接口)
4.如果枚举类没有显式定义构造器,那么它默认存在一个无参构造器。这是因为在Java中,每个枚举类都隐式地继承自java.lang.Enum类,而java.lang.Enum类提供了一个无参的构造器。因此,即使你不在枚举类的定义中显式编写构造器,编译器也会自动为你提供一个无参构造器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值