JavaSE基础篇:枚举

简介: JavaSE基础篇:枚举

第一章:枚举类

枚举类:类的对象只有有限个,且是确定的

Java枚举型是静态常量,隐式地用static final修饰过,这里面包含了两层意思:

1:举型中的实例隐式地用public static final修饰过

2:枚举型作为某个类中的成员字段也隐式地用 static final修饰过

私有化类的构造器,保证不能在类的外部创建其对象在类的内部创建枚举类的实例

一:自定义一个枚举类

如何定义枚举类?方式一:JDK5.0之前,自定义枚举类步骤:私有化类的构造器,保证不能在类的外部创建其对象在类的内部创建枚举类的实例。声明为:public static final对象如果有实例变量,应该声明为private final,并且在构造器中初始化实例:

public class SeasonTest {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring)
    }
}
//自定义枚举类
class Season {
    //1.声明Season对象的属性:private final修饰
    private final String seasonName;
    private final String seasonDesc;
    //2.私有化类的构造器,并给对象属性赋值
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    //3.提供当前枚举类的多个对象:public static final的
    public static final Season SPRING = new Season("春天", "Spring");
    public static final Season SUMMER = new Season("夏天", "Summer");
    public static final Season AUTUMN = new Season("秋天", "Autumn");
    public static final Season WINTER = new Season("冬天", "Winter");
    //4.其他诉求1:获取枚举类对象的属性
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
    //4.其他诉求2:提供toString()
    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}

二:JDK提供的枚举类型

JDK5.0及其以后,可以使用enum关键字定义枚举类步骤:使用enum关键字定义枚举类声明对象属性,使用private final修饰私有化类的构造器,并给对象属性赋值提供当前枚举类的对象,多个对象之间用","隔开,末尾对象;结束

public class SeasonTest1 {
    public static void main(String[] args) {
        Season1 summer = Season1.SUMMER;
        System.out.println(summer);
        System.out.println("**********************");
        Season1[] values = Season1.values();
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);
            values[i].show();
        }
        Season1 winter = Season1.valueOf("WINTER");
        System.out.println(winter);
        winter.show();
    }
}
interface Info {
    void show();
}
//使用enum关键字
enum Season1 implements Info {
    //3.提供当前枚举类的对象,多个对象之间用“,”隔开,末尾对象;结束
    SPRING("春天", "Spring") {
        @Override
        public void show() {
            System.out.println("where arr you");
        }
    },
    SUMMER("夏天", "Summer") {
        @Override
        public void show() {
            System.out.println("i miss you");
        }
    },
    AUTUMN("秋天", "Autumn") {
        @Override
        public void show() {
            System.out.println("i want to be with you");
        }
    },
    WINTER("冬天", "Winter") {
        @Override
        public void show() {
            System.out.println("i want you");
        }
    };
    //1.声明Season对象的属性:private final修饰
    private final String seasonName;
    private final String seasonDesc;
    //2.私有化类的构造器,并给对象属性赋值
    private Season1(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    //4.其他诉求1:获取枚举类对象的属性
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
    //4.其他诉求2:提供toString()
    @Override
    public String toString() {
        return "Season1{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
  /*  @Override
    public void show() {
        System.out.println("this is a season");
    }*/
}

enum类中的常用方法:values():返回枚举类型的对象数组。该方法可以方便地遍历所有的枚举值valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。toString():返回当前枚举类对象常量的名称enum使用说明:使用enum定义的枚举类默认继承了java.lang.Enum类,因此不能再继承其他类枚举类的构造器只能使用private权限修饰符必须在枚举类的第一行声明枚举类对象

三:枚举中静态代码块的执行顺序

package com.dashu.nettytest;
import java.util.HashMap;
import java.util.Map;
public enum FruitEnum {
    APPLE("苹果","红色","酸甜可口"),
    BANANA("香蕉","黄色","软糯香甜"),
    Orange("橘子","黄色","酸酸甜甜");
    private static final Map<String,FruitEnum> map = new HashMap<>();
    static {
        System.out.println("static。。。。。。。。。。。111");
        map.put("苹果",APPLE);
        map.put("香蕉",BANANA);
        map.put("橘子",Orange);
        System.out.println("static。。。。。。。。。。。222");
    }
    private String name;
    private String color;
    private String taste;
    {
        System.out.println("成员代码块");
    }
    private FruitEnum(String name,String color,String taste){
        this.name = name;
        this.color = color;
        this.taste = taste;
        System.out.println("构造方法");
    }
}
class shit {
    public static void main(String[] args) {
        FruitEnum apple = FruitEnum.APPLE;
        //成员代码块
        //构造方法
        //成员代码块
        //构造方法
        //成员代码块
        //构造方法
        //static。。。。。。。。。。。111
        //static。。。。。。。。。。。222
    }
}

枚举中都是static修饰的,类加载的时候就会将静态内容加载到JVM当中,静态内容也会按照顺序进行执行,但是执行到枚举中静态实例的会后就会触发构造法和成员代码块去创建对象。这样的话就会产生一种错觉,static修饰的代码块执行靠后了。

相关文章
|
2天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
266 116
|
17天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
12天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
658 220
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
334 34
Meta SAM3开源:让图像分割,听懂你的话
|
10天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1528 157
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
897 61
|
7天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
291 140