当前位置: 首页 > news >正文

每日一题----------枚举的注意事项和细节

注意事项:

1.当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类,利用javap反编译可查。

2.public static Season SPRING = new Season("春天", "温暖");简化成SPRING("春天", "温暖"),你必须要清楚它调用的是哪个构造器

3.如果使用无参构造器 创建,枚举对象,则实参列表和小括号都可以省略。SPRING();

4.当有多个枚举对象时,使用逗号间隔,最后一个分号结尾。

5.枚举对象必须放在枚举类的首行。跟super位置一样,可以这样理解。

6.如果enum定义了一个类,那么该类不能再继承了,因为有一个隐藏的继承,因为java是单继承,但可以接入多接口,比如说 enum  A implements B {      类体   }

总结:

1.构造器私有化 。

2.本类内部创建一组对象 (四个 春夏秋冬)。

3.对外暴露对象(通过为对象添加public  final static 修饰符)。

4.可以提供get方法,但是不提供set方法,变为只读状态。

看以下代码实例:

1.构造器私有化 。

    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

2.本类内部创建一组对象 (四个 春夏秋冬)。

    public static Season SPRING = new Season("春天", "温暖");
    public static Season WINTE =  new Season("冬天", "寒冷");
    public static Season SUMMER = new Season("冬天", "寒冷");
    public static Season AUTUMN = new Season("秋天", "凉爽");

3.对外暴露对象(通过为对象添加public  final static 修饰符)。

        System.out.println(Season.SPRING);
        System.out.println(Season.AUTUMN);
        System.out.println(Season.SUMMER);
        System.out.println(Season.WINTE);

4.可以提供get方法,但是不提供set方法,变为只读状态

    public String getName() {
        return name;
    }
    public String getDesc() {
        return desc;
    }
    @Override
    public String toString() {
        return name + desc ;
    }

细节:如果使用enum来实现枚举

1.使用关键字enum代替class。

2.public static Season SPRING = new Season("春天", "温暖");直接使用

SPRING("春天", "温暖") = public static Season SPRING = new Season("春天", "温暖");

3.如果有多个常量,中间使用 , 逗号间隔符即可。

4.如果使用enum来实现枚举,要求将定义常量对象,写在前面,也就是像super一样,写在前面。

总结:对比:所修改的代码

enum Season {
    WINTE("冬天", "寒冷"),
    SPRING("春天", "温暖"),
    SUMMER("冬天", "寒冷"),
    AUTUMN("秋天", "凉爽");
    private String name;
    private String desc;
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
    public String getName() {
        return name;
    }
    public String getDesc() {
        return desc;
    }
    @Override
    public String toString() {
        return name + desc ;
    }

也就中间的值变化了,其余都没有改变。这里toString是为了获取信息,否则打印出来是地址。

enum常用方法应用实例;

1.toString:Enum类已经重写过了,返回的是当前对象名,子类可以重写该方法,用于返回对象的属性信息。

2.name:返回当前对象名(常量名),子类中不能重写

3.ordinal:返回当前对象的位置号,默认从0开始。

4.values:返回当前枚举类中所有的常量

5valueof:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常。

6.compareTo:比较两个枚举的常量,比较的就是符号,就是位置。

练习题目:

代码:

public class enum02 {
    public static void main(String[] args) {
        //直接调用week调用values方法,获取值
         Week[] weeks= Week.values();
         //用增强for循环
         for (Week week : weeks) {
             System.out.println(week);
         }
    }
}
enum Week {
    MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),
    THURSDAY("星期四"),FIRDAY("星期五"),SATURDAY("星期六"),SUNDAY("星期日");
    private String name;
    private Week(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

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

相关文章:

  • C/C++蓝桥杯算法真题打卡(Day3)
  • 江科大51单片机笔记【11】AT24C02(I2C总线)
  • 算法·搜索
  • 数据集笔记 LTA Traffic Count
  • VS2019,VCPKG - 为VS2019添加VCPKG
  • LInux 文件系统
  • Spring Boot 缓存最佳实践:从基础到生产的完整指南
  • 实时读取另一个串口发来的返回数据
  • Android 低功率蓝牙之BluetoothGattDescriptor详解
  • 装饰器模式--RequestWrapper、请求流request无法被重复读取
  • 基于GeoTools的GIS专题图自适应边界及高宽等比例生成实践
  • 【JavaSE-8】面向对象
  • 运动控制卡--固高实用
  • 软件信息安全性测试流程有哪些?专业软件测评服务机构分享
  • MySQL自定义序列数的实现
  • 【AIGC系列】6:HunyuanVideo视频生成模型部署和代码分析
  • 【Framework系列之Client】UIManager和UIPanel模块介绍
  • Go加spy++隐藏窗口
  • 梦三国2游戏下载
  • io学习------>进程
  • 中国原创“地贫”基因编辑疗法新进展:复旦儿科医院治愈4名重型患儿
  • 巴基斯坦西南部一辆客车遭袭造成至少4死30伤
  • 福建福州马尾区区长王刚跨省份调任新疆生产建设兵团国资委主任
  • 王毅同丹麦外交大臣会谈,表示在格陵兰问题充分尊重丹麦主权和领土完整
  • 特朗普与普京就俄乌问题通话
  • 特朗普与普京开始电话会谈,稍后将致电泽连斯基