java枚举

枚举介绍

Java中的枚举(Enumeration 简写 Enum)是一组常量的集合,是一种特殊的类,用于表示固定数量的特定对象。

声明枚举

共有两种方法可声明枚举:

一、自定义类实现枚举

1、将构造器私有化,防止通过构造器创建新对象。

2、去掉set相关方法,防止已有属性被修改

3、直接在类内部创建固定数量的静态对象,使得在外部类可直接调用该对象

4、枚举对象命名时,通常全部大写(符合常量的命名规范)

java 复制代码
public class go {//主方法
    public static void main(String[] args) {
        System.out.println(pet.DOG.getName());//调用静态对象
    }
}

class pet{
    private String name;
    private String food;
    //在类内部直接创建final静态对象,static方便调用,final防止被修改
    public static final pet DOG =new pet("小狗","骨头");

    private pet(String name, String food) {//构造器私有化
        this.name = name;
        this.food = food;
    }

    public String getName() {//去除相关的set方法
        return name;
    }

    public String getFood() {
        return food;
    }
}

二、使用enum关键字实现枚举

1、使用 enum 关键字代替 class

2、以DOG("小狗","骨头");代替public static final pet DOG =new pet("小狗","骨头");

3、如需创建多个对象,则定义对象之间以","取代";"句尾再用";"结尾

4、创建枚举对象必须放在枚举类的首行

java 复制代码
public class go {//主方法

    public static void main(String[] args) {
        System.out.println(pet.DOG.getName());
    }
}

enum pet{//使用 enum 关键字代替 class 
    DOG("小狗","骨头"),//创建多个对象时以","取代";"句尾再用";"结尾
    CAT("小猫","鱼干");//创建枚举对象必须放在枚举类的首行

    private String name;//后续代码保持不变
    private String food;


    private pet(String name, String food) {
        this.name = name;
        this.food = food;
    }

    public String getName() {
        return name;
    }

    public String getFood() {
        return food;
    }
}

注意事项

1、如果使用无参构造器创建枚举对象,则实参列表和括号都可以省略

java 复制代码
enum pet{//枚举类
    DOG();//调用无参构造器
    DOG;//等同于DOG()

    private pet() {//默认无参构造器
    }
}

2、当使用enum关键字开发一个枚举类时,默认会继承Enum类

即java.lang.Enum,继承后的类为 public static final 类名。自然也可以使用Enum类的相关方法

方法名 描述
name 得到当前枚举常量的名称(建议优先使用toString)
ordinal 得到当前枚举常量的次序,表示第几个枚举对象(次序从0开始)
values values方法返回枚举类数组,数组元素为定义的所有枚举对象 示例:CLASS myclass\[\]= CLASS.values();
valueof 根据输入的值查找所在枚举类中是否存在以该值命名的对象,如果有则返回该对象,没有则报错
java 复制代码
public class go {//主方法
    public static void main(String[] args) {
        System.out.println(pet.valueOf("DOG"));//正确,输出类名DOG
        System.out.println(pet.valueOf("CAT"));//错误,系统报错
    }
}

enum pet{
    DOG("小狗","骨头");
    private String name;
    private String food;
    //后续相关方法
}

|-----------|--------------------------------|
| compareTo | 将两个枚举对象的次序相减,其次序等同于ordinal所得次序 |

java 复制代码
public class go {//主方法
    public static void main(String[] args) {
        System.out.println(pet.DOG.compareTo(pet.CAT));//输出-1
    }}

enum pet{
    DOG,CAT;//DOG次序为0,CAT次序为1
}

3、使用enum关键字后,就不能再继承其他类

因为enum会隐式的继承Enum类,而java是单继承机制。

4、枚举和普通类一样,也可以实现接口

java 复制代码
public class go {//主方法
    public static void main(String[] args) {
        WEEK.FIRST.show();//调用枚举对象的show方法
    }
}
interface API{//定义接口
    void show();
}
enum WEEK implements API {//枚举类实现接口
    FIRST;//创建枚举对象
    @Override
    public void show() {//实现接口种的方法
        System.out.println("说点什么");
    }
}
相关推荐
就叫_这个吧7 小时前
Java递归方法实现面包屑导航
java·开发语言
fīɡЙtīиɡ ℡7 小时前
AI 应用系统设计
java·开发语言·人工智能
城管不管7 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅7 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
AI绘画哇哒哒7 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
最强小杰8 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
今天AI了吗9 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
TELL5219 小时前
selenium webdriver 第二次初始化的异常
开发语言·python
动词ing10 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习10 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展