JAVA--枚举类

本文详细介绍了Java枚举类的定义,如何设置只读属性,以及如何自定义枚举类实例。涵盖了私有化构造器、枚举值的初始化、使用`enum`关键字定义的特殊性质和接口实现。通过实例演示了如何创建枚举对象并运用values()和valueOf()方法。

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

一、定义:

 类的对象是有限个、确定的。如:

性别:男、女;

线程状态:创建、就绪、运行、堵塞、死亡;

当需要定义一组常量时,强烈建议使用枚举类。

二、属性:

1、枚举类对象的属性不应允许被改动,所以使用private final修饰;

2、枚举类的属性应该在构造器中赋值;

3、若枚举类使用了含参构造器,列出枚举值时也必须传相应的参数;

三、自定义枚举类:

1、私有化类的构造器,保证不能在类的外部创建其对象;

2、在类的内部创建枚举类的实例,其实例声明为:public static final;

3、对象如果有实例变量,应该声明为private final ,并在构造器中初始话;

实例:

class Enumer1{
    private final String SeasonName;
    private final String SeasonDesc;

    private Enumer1(String name,String desc){
        this.SeasonName=name;
        this.SeasonDesc=desc;
    }

   public static final Enumer1 SPRING=new Enumer1("春天","春暖花开");
    public static final Enumer1 SUMMER=new Enumer1("夏天","夏日炎炎");
    public static final Enumer1 AUTUMN=new Enumer1("秋天","秋高气爽");
    public static final Enumer1 WINTER=new Enumer1("冬天","冰天雪地");

    public String getSeasonName() {
        return SeasonName;
    }

    public String getSeasonDesc() {
        return SeasonDesc;
    }

    @Override
    public String toString() {
        return "Enumer1{" +
                "SeasonName='" + SeasonName + '\'' +
                ", SeasonDesc='" + SeasonDesc + '\'' +
                '}';
    }
}
public class EnumerTest1 {
    public static void main(String[] args) {
        Enumer1 spring=Enumer1.SPRING;
        System.out.println(spring);

    }
}

四、使用enum定义枚举类

1、使用enum定义的枚举类默认继承了java.lang.Enum类,因此不能再继承其他类;

2、枚举类的构造器只能使用private访问修饰符;

3、枚举类第一行必须声明枚举类对象,并且实例之间用“,”隔开“;”结尾,其中public static final修饰由系统自动添加;

4、常用方法:

values()方法:返回枚举类型的对象数组;(该方法可以很方便的遍历所有的枚举值)

valueOf(String str)方法:可以把一个字符串转化为对应的枚举类对象,要求字符串和枚举类对象一致,否则运行是异常;

toString():返回当前枚举类对象常量的名称;

5、实现接口:

a、和普通java类一样可以实现一个或多个接口;

b、根据每个枚举值是否需要实现接口中方法的同一行为方式,可选择统一实现该方法或枚举值分别实现;

实例:

interface Inte{
    public void show();
}
enum Enumer2 implements Inte{
    SPRING("春天","春暖花开"){
        @Override
        public void show() {
            System.out.println("春天很好");
        }
    },
    SUMMER("夏天","夏日炎炎"){
        @Override
        public void show() {
            System.out.println("没人会喜欢这个夏天");
        }
    },
    AUTUMN("秋天","秋高气爽"){
        @Override
        public void show() {
            System.out.println("没有秋天");
        }
    },
    WINTER("冬天","冰天雪地"){
        @Override
        public void show() {
            System.out.println("今年没有冬天");
        }
    };

    private final String SeasonName;
    private final String SeasonDesc;

    Enumer2(String seasonName, String seasonDesc) {
        SeasonName = seasonName;
        SeasonDesc = seasonDesc;
    }

    public String getSeasonName() {
        return SeasonName;
    }

    public String getSeasonDesc() {
        return SeasonDesc;
    }

    
    }
}
public class EnumerTest2 {
    public static void main(String[] args) {
        Enumer2 enumer2 = Enumer2.AUTUMN;
        Enumer2 summer = Enumer2.valueOf("SUMMER");
        summer.show();
        Enumer2[] values = Enumer2.values();
        for (int i=0;i<values.length;i++){
            System.out.println(values[i]);
        }

        System.out.println(enumer2);
    }
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值