【Java高级编程】枚举类注解

news2024/11/16 1:40:55

在这里插入图片描述

枚举类&注解

      • 1、枚举类的使用
        • 1.1、枚举类的使用
        • 1.2、如何定义枚举类
        • 1.3、Enum类的主要方法
      • 2、注解的使用
        • 2.1、注解的概述
        • 2.2、常见的Annotation示例
        • 2.3、如何自定义注解:参照@SuppressWarnings定义
        • 2.4、JDK提供的4种元注解
        • 2.5、JDK 8中注解的新特性:可重复注解、类型注解

1、枚举类的使用

1.1、枚举类的使用

  • 枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类
  • 当需要定义一组常量时,强烈建议使用枚举类
  • 如果枚举类中只有一个对象,则可以作为单例模式的实现方式

1.2、如何定义枚举类

  • 方式一:jdk 5.0之前,自定义枚举类
public class Season {
    // 1、声明Seaon对象的属性: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("春天", "春暖花开");
    public static final Season SUMMER = new Season("夏天", "夏日炎炎");
    public static final Season AUTUMN = new Season("秋天", "秋高气爽");
    public static final Season WINTER = new Season("冬天", "冬日可爱");
}
  • 方式二:jdk 5.0,可以使用enum关键字定义枚举类
  • 定义的枚举类默认继承于java.lang.Enum类
interface Info {
    void show();
}

// 使用enum关键字枚举类
public enum Season1 implements Info{
    // 1、提供当前枚举类的对象,多个对象之间用","隔开,末尾对象用";"结束
    SPRING("春天", "春暖花开") {
        @Override
        public void show() {
            
        }
    },
    SUMMER("夏天", "夏日炎炎") {
        @Override
        public void show() {
            
        }
    },
    AUTUMN("秋天", "秋高气爽") {
        @Override
        public void show() {
            
        }
    },
    WINTER("冬天", "冬日可爱") {
        @Override
        public void show() {
            
        }
    };

    // 2、声明Season对象的属性:private final修饰
    private final String seasonName;
    private final String seasonDesc;

    // 3、私有化类的构造器,并给对象属性赋值
    private Season1(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    // 一般都是各个枚举类对象分别实现接口,不推荐在类中实现抽象方法
    // @Override
    // public void show() {
    //
    // }
}

1.3、Enum类的主要方法

  • value():返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举类
  • valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的"名字"。如不是,会有运行时异常:illegalArgumentException
  • toString():返回当前枚举类对象常量的名称

2、注解的使用

2.1、注解的概述

  • 从JDK 5.0开始,Java增加了对元数据的支持,也就是Annotation(注解)
  • Annotation其实就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
  • 框架 = 注解 + 反射 + 设计模式

2.2、常见的Annotation示例

  • 示例一:生成文档相关的注解
  • 示例二:在编译时进行格式检查(JDK内置的三个基本注解)
    • @Override:限定重写父类方法,该注解只能用于方法
    • @Deprecated:用于表示所修饰的元素(类,方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择
    • @SuppressWarnings:抑制编译器警告
  • 示例三:跟踪代码依赖性,实现代替配置文件功能

2.3、如何自定义注解:参照@SuppressWarnings定义

  • 注解声明为:@interface
  • 内部定义成员,通常使用value表示
  • 可以指定成员的默认值,使用default定义
  • 如果自定义注解没有成员,表明是一个标识作用
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface MyAnnotation {
    // 多个参数:此时的value是个成员,不是方法
    String[] value();
    // 单个参数:如果有默认值,则如此定义
    // String value() default "Hello";
}
  • 如果注解有成员,在使用注解时,需要指明成员的值
  • 自定义注解必须配上注解的信息处理流程(使用反射)才有意义
  • 自定义注解通常都会指明两个元注解:Retention、Target

2.4、JDK提供的4种元注解

  • 元注解:对现有的注解进行解释说明的注解
  • Retention:指定所修饰的Annotation的生命周期:SOURCE\CLASS(默认值)\RUNTIME,只有声明为RUNTIME生命周期的注解,才能通过反射获取
  • Target:用于指定被修饰的Annotation能用于修饰哪些程序元素
  • Documented:表示所修饰的注解在被javadoc解析时,保留下来
  • Inherited:被它修饰的Annotation将具有继承性

2.5、JDK 8中注解的新特性:可重复注解、类型注解

  • 可重复注解:
    • 在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class
    • MyAnnotation的Target和Retention等元注解与MyAnnotations相同
  • 类型注解:
    • ElementType.TYPE_PARAMETER:表示该注解能写在类型变量的声明语句中(如:泛型声明)
    • ElementType.TYPE_USE:表示该注解能写在使用类型的任何语句中
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface MyAnnotations {
    MyAnnotation[] value();
}

@Repeatable(MyAnnotations.class)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface MyAnnotation {
    String value1() default "Hello";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/696772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023-06-25:redis中什么是缓存穿透?该如何解决?

2023-06-25:redis中什么是缓存穿透?该如何解决? 答案2023-06-25: 缓存穿透 缓存穿透指的是查询一个根本不存在的数据,在这种情况下,无论是缓存层还是存储层都无法命中。因此,每次请求都需要访…

关于C++图论树的某些题图形提示

一、去教室的路。 猫猫大学有n条路,每条路都有一个数字编号,其中的一条路一定与另外2条路相连,请你打出这个学校的地图。 输入1: 1 2 3 4 2 3 45 4 45 1 输出1: 1 2 3 4 5 45 图解 &#xff1…

动态住宅代理VS静态住宅代理,怎么选择?

现在,越来越多的海外代理服务商均支持动态住宅IP与静态住宅IP,很多小伙伴就疑惑,这二者有什么区别呢?哪个更好?其实,没有哪个更好,只有哪一个更合适您的业务。 无论动态住宅IP还是静态住宅IP都来自真实的住…

【软件测试】10道性能测试高频面试题,你能答上多少?

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、性能测试包含了…

表格el-table多出一条横线,怎么解决(el-table表格下方多一条线的问题)

最近在写el-table表格的时候,发现的问题,表格多出一条横线, 可以看出其它行,都是正常显示,只有第7行多出一条横线,找了好久, 最后发现是el-table表格的伪元素,问题就出在这&#xf…

B站化播放量为播放时长,是谁的狂欢?

6月26日晚,B站举办了14周年庆典晚会。在晚会上,除了周深、美依礼芽同框献唱受到关注,B站董事长兼CEO陈睿的演讲内容同样值得深思: 一来,陈睿提到,要将目前B站视频前台显示的播放量数据从次数改为分钟数&am…

精进ARM计算架构,催生人工智能产业的巨大跨越

在优化ARM计算架构以支持人工智能应用方面,以下是一些常见的方法和技术: 算法和模型设计优化:选择合适的算法和模型结构对于在ARM架构上高效执行人工智能任务至关重要。设计轻量级的模型、减少冗余操作和参数量,使用适合ARM架构的…

【K8S系列】深入解析K8S调度

序言 做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点 Kubernetes (k8s) 是一个容器编…

扩展ExtendedFloatingActionButton滚动收缩展开行为

效果 首先ExtendedFloatingActionButton有默认的Behavior : ExtendedFloatingActionButtonBehavior,这个类是为了ExtendedFloatingActionButton不被SnakBar所遮挡,并且这个类它是protected,所以为了保留原有的设计,自定义的Behavior不能在外部定义&#…

Go语言单元测试

1、Go语言单元测试 Go语言中的测试依赖 go test 命令,go test 命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录 内,所有以 _test.go 为后缀名的源代码文件都是 go test 测试的一部分,不会被 go build 编译到最终的可执行 文件…

【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28

链接:https://pan.baidu.com/s/18oE308_NVNPaCOACw_H5Hw?pwdabc1 利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28 这是网上的数据,怎么将它爬取下来 它将只爬取最近30期的双色球开…

星辰秘典:解开Python项目的神秘面纱——迷宫之星(迷宫探索与求解)

✨博主:命运之光 🌸专栏:Python星辰秘典 🐳专栏:web开发(html css js) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主页 前言:你好&#x…

文件系统理解——磁盘文件

磁盘文件 1. 问题提出2. 了解磁盘的物理结构2.1 磁盘大体结构2.2 磁盘的具体物理结构 3.对磁盘结构逻辑抽象3.1 OS是通过CSH方法进行扇区的管理的吗?3.2 磁盘逻辑过程 4.文件系统4.1 管理思想4.2 区结构Boot BlockSuper BlockGroup Descriptor Tableinode Table &am…

共享办公室在国内外的发展史以及现状介绍

共享办公室,这个曾经陌生的概念,如今已成为全球范围内炙手可热的话题。在这个时代,越来越多的人开始关注灵活性和协作性,而共享办公室正是在这种需求下应运而生的。本文将带您一探共享办公室的国内外发展史、国内当前发展现状以及…

记录一次nginx占用cpu饱满解决

一天下午,突然就爆满了。刚开始服务器都登不上,后来服务器可以登录上,宝塔进不去,网站访问不了,top后发现nginx爆满 执行下列代码,停止nginx服务 systemctl stop nginx 虽然停止了 可以上宝塔 再次手动…

硬件工程师JD

不知道这么做合不合适,我先发一个试试,团队在招人, 岗位是 航天航空电子工程师1,混合电推和起发电方向; 电机控制硬件工程师1,新能源汽车电机控制器硬件开发方向。 工作内容: 1、负责硬件系…

美国首只杠杆比特币期货ETF开盘,成交量近550万美元!

纽约时间6月27日,美国首只杠杆比特币期货ETF(股票代码:BITX)在CBOE BZX交易所开盘,成交量近550万美元,成为今年推出的ETF中首日交易量最大的产品。 BITX的推出,正值贝莱德(BlackRock)向SEC递交现…

【教学类-36-04】Midjounery 各种图片切割(通用公式)

作品展示: 6*6切割36图 5*4图:20张 问题产生: 之前的代码是:一张图的四个坐标,有4张就要写4行。 后续发现,Midjounery生成的图片矩阵X Y数量不等,不仅有3*3,还有4*3、5*4的结构&am…

基于appnium+python+夜神模拟器的自动化

目录 1、安装夜神模拟器 2、定位元素 3、开始编码 首先搭好appnium环境!参考https://www.cnblogs.com/testlearn/p/11419797.html 1、安装夜神模拟器 下载安装夜神模拟器后,在cmd命令输入adb connect 127.0.0.1:62001,显示出设备则表示…

虚拟稀疏卷积在多模态 3D 目标检测中的应用

论文背景 虚拟点云生成时,从图像中生成的虚拟点非常密集,在检测过程中引入了大量的冗馀计算量。同时,不准确的深度补全所带来的噪声会显著降低检测精度。 早期利用图像特征扩展LiDAR点的特征的方法,如语义掩膜和二维CNN特征。他…