面向对象------枚举


什么是枚举

枚举属于一组特殊的类,里面只包含一组有限的特定的对象,一般表示一组常量。

枚举的好处:可以讲常量组织起来统一进行管理。

枚举可以添加方法,除了不能继承,基本上可以将它看成一个常规的类

枚举可以添加普通方法、静态方法、抽象方法、构造方法

语法定义格式:

enum枚举名{枚举元素1,枚举元素2,……}

实例:

eunm Animal{
Cat,Dog,sheep;//常量
}

任意两个枚举成员不能具有相同的名称,它们的数值必须在该枚举的基础类型范围之内

可以通过枚举类型名直接引用常量如 Animal.Dog。

📣提示:如果没有显式地声明基础类型的枚举,那么默认基础类型是 int。

枚举实现方式

自定义实现枚举

  1. 不需要提供set方法,因为枚举对象通常为只读
  2. 对枚举对象/属性使用final+static共同修饰,实现底层优化
  3. 枚举对象名通常使用全部大写,常量的命名规范
  4. 枚举对象根据需要,也可以有多个属性

自定义枚举的特点

  1. 构造器私有化
  2. 本类内部创建一组对象
  3. 对外暴露对象(通过为对象添加public final static修饰符)
  4. 可以提供get方法,但不要提供set方法

使用enum关键字实现枚举

  1. 使用关键字enum替代calss
  2. public static final Season MONDAY=new Season(星期一)直接使用MONDAY(“星期一”)替代
    常量名(实参列表)
  3. 如果有多个常量(对象),使用“,”隔开,最后一个以‘;’号结尾。
  4. 如果使用enum来实现枚举,要求将定义常量对象写在前面。

实例:

package com.Enum;
public class s {
    public static void main(String[] args) {

        //获取所有的枚举对象,即数组
      Week[] s=Week.values();

//遍历使用增强for
       for (Week week:s)
            System.out.println(week);
        }
    }
    enum Week{//使用关键字enum来替代class
        MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),
        THURSDAY("星期四"),FRIDAY("星期五"),SATURDAT("星期六"),
        SUNDAY("星期天");

        private String name;
        private Week(String name){
            this.name=name;
        }

        @Override
        public String toString() {
            return name;
        }
    }

注意事项❗️

1️⃣ 当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类
2️⃣ 枚举对象必须放在枚举类的最前面
3️⃣ 如果我们使用的是无参构造器,创建常量枚举对象,则可以省略实参列表和小括号
4️⃣枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。
5️⃣使用enum关键字后,就不能再继承其他类了,因为enum会隐式继承Enum,而java是单继承机制
6️⃣枚举类和普通类一样,可以实现接口,如: enum 类名 implements 接口1,接口2{ }

枚举可以像一般类一样实现接口

枚举成员

  • 枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。
  • 枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。

常用方法

Java 中的每一个枚举都继承自 java.lang.Enum 类。当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例,这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可

所有枚举实例都可以调用Enum类的方法

  • values():返回枚举类中所有的值
  • valueOf():返回指定字符串值的枚举常量
  • ordinal():可以找到每个枚举常量的索引,就像数组索引一样

实例1:利用values()方法返回枚举类中所有的值

public class g {
    public static void main(String[] args) {
    for (int i=0;i<show.values().length;i++){//遍历枚举类中的元素
        System.out.println(show.values()[i]);
    }
    }
}
enum show{//定义枚举类
   FRIDAY,SATURDAY,SUNDAY
}

运行结果:
FRIDAY
SATURDAY
SUNDAY

实例2:利用ordinal()方法,找到每个枚举常量的索引

package A;
public class g {
    public static void main(String[] args) {
    for (int i=0;i<show.values().length;i++){
        System.out.println("索引"+show.values()[i].ordinal()+"的值为:"+show.values()[i]);
    }
    }
}
enum show{
   FRIDAY,SATURDAY,SUNDAY
}

运行结果:
索引0的值为:FRIDAY
索引1的值为:SATURDAY
索引2的值为:SUNDAY

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值