枚举类笔记

本文探讨了在Java中如何解决限定范围内数据的问题,主要对比了JDK1.5之前自定义类与JDK1.5之后使用枚举类的两种方案。详细介绍了枚举类的格式和注意事项,并举例说明了在switch语句中如何使用枚举类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、问题:

  1. 某些方法所接受的数据必须是在固定范围之内的,怎么解决?
    1. 方案一:jdk1.5之前,自定义一个类,私有化构造函数,在自定义类中创建本类的对象对外使用。
    2. 方案二:jdk1.5之后,使用枚举类(enum)来解决这种问题。

1.1 方案一:jdk1.5之前,使用自定义类解决

// 方案一:jdk1.5之前,自定义一个类,私有化构造方法,在自定义类中创建类的对象,对外使用
class Gender {
    String value;//成员变量

    public static final Gender man = new Gender("男");
    public static final Gender woman = new Gender("女");
    
    //私有化构造方法,使外部无法构建类的实例
    private Gender(String value) {
        this.value = value;
    }
}

1.2 方案二:jdk1.5之后使用枚举类解决

enum Sex {
    //7.枚举值必须位于枚举类的第一个语句,多个枚举值之间使用逗号(,)分开
    //1.枚举值默认的修饰符是private static final
    woman("女") {
        @Override
        public void run() {
            System.out.println("女人在跑...");
        }
    },

    //2.枚举值的数据类型就是枚举值所属类的类型,它指向了本类的对象。
    //2.枚举值 man("男") 与 private static final Sex man = new Sex("男");相等
    man("男") {
        @Override
        public void run() {
            System.out.println("男人在跑...");
        }
    };

    String value;// 3.枚举类可以有成员变量

    private void sun() {//3.枚举类可以有成员函数
        System.out.println("枚举类的成员函数...");
    }

    //4.枚举类可以有构造函数,但是修饰符必须是private,默认也是private
    private Sex(String value) {
        this.value = value;
    }

    // 5.枚举类可以存在抽象方法,但是枚举值必须实现抽象方法
    public abstract void run();

}

2、枚举类

  1. 一些方法在运行时,他需要的数据不能是任意的,必须是固定范围之内的值,jdk1.5后可以直接使用枚举(enum)解决

 

2.1 枚举类的格式

      enum 类名{

        // 枚举值

      }

 

2.2 枚举类需要注意的细节

1.枚举类是一个特殊的类

2.枚举值默认的修饰符是:public static final

3.枚举值就是枚举值所属的类的数据类型,然后枚举值是指向了本类的对象的。

4.枚举类的构造方法的修饰符,默认是private

5.枚举类可以定义自己的成员变量和成员函数。

6.枚举类可以自定义构造函数,但是修饰符必须是private

7.枚举类可以存在抽象的方法,但是枚举值必须实现抽象方法

8.枚举值必须要位于枚举类的第一个语句。

 

3.在switch中使用枚举类

      switch适用的数据类型:byte、short、int、char、String、枚举

      注意:case语句后边跟的枚举值,只需要单写枚举值即可,不需要再声明该枚举值是属于哪个枚举类的。

3.1 案例

public class Dome4 {
    public static void main(String[] args) {
        Season season = Season.spring;//枚举类的构造方法默认是private,不能在外部创建实例
        switch (season) {
            case spring://当option是枚举类的对象时,case选项不需要使用类名.属性,直接使用属性即可。
                System.out.println("春天来了....");
                break;
            case summer:
                System.out.println("夏天来了....");
                break;
            case autumn:
                System.out.println("秋天来了....");
                break;
            case winter:
                System.out.println("冬天来了....");
                break;
        }
    }
}
// 季节枚举类
enum Season {
    spring, summer, autumn, winter  // 枚举值
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值