【Java】注解(Annotation)

1.注解

  • 就是lava代码里的特殊标记,比如:@Override、@Test等,作用是:让其他程序根据注解信息来决定怎么执行该程序。
  • 注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上、等位置处。

如下@Override所示:

2.自定义注解

就是自己定义注解

特殊属性名: value
如果注解中只有一个value属性,使用注解时,value名称可以不写!!

自定义注解的基本使用:

定义自定义注解:

public @interface Mytest {
    String aaa();
    boolean bbb() default true;
    String[] ccc();
}

使用上面的自定义注解: 

@Mytest(aaa="aaa",bbb = false,ccc={"a","b"})
public class Annotation_test {
}

3.注解的原理

  • 注解本质是一个接口,Java中所有注解都是继承了Annotation接口的
  • @注解(其实就是一个实现类对象,实现了该注解以及Annotation接口

4.元注解

指的是:修饰注解的注解 

有以下两个常用元注解:

元注解的基本使用:

@Target({ElementType.METHOD,ElementType.TYPE})//当前被修饰的注解只能在类,接口,成员方法中使用
@Retention(RetentionPolicy.RUNTIME)//控制下面的注解一直保留到运行时
public @interface Mytest {
}

5.什么是注解的解析?

  • 就是判断类上、方法上、成员变量上是否存在注解,并把注解里的内容给解析出来。

如何解析注解?

  • 指导思想:要解析谁上面的注解,就应该先拿到谁
  • 比如要解析类上面的注解,则应该先获取该类的Class对象,再通过Class对象解析其上面的注解
  • 比如要解析成员方法上的注解,则应该获取到该成员方法的Method对象,再通过Method对象解析其上面的注解
  • Class、Method、Field,Constructor、都实现了AnnotatedElement接口,它们都拥有解析注解的能力

6.解析注解的案例

解析注解的案例,具体需求如下:

1.定义注解MyTest4,要求如

  • 包含属性: String value()
  • 包含属性: double aaa(),默认值为 100
  • 包含属性: Stringl] bbb()
  • 限制注解使用的位置:类和成员方法上
  • 指定注解的有效范围:一直到运行时

2.定义一个类叫:Demo,在类中定义一个test1方法,并在该类和其方法上使用MyTest4注解

3.定义AnnotationTest3测试类,解析Demo类中的全部注解。

定义注解:

@Target({ElementType.METHOD,ElementType.TYPE})//当前被修饰的注解只能在类,接口,成员方法中使用
@Retention(RetentionPolicy.RUNTIME)//控制下面的注解一直保留到运行时
public @interface Mytest4 {
    String value();
    double aaa() default 100;
    String[] bbb();
}

定义类Demo

@Mytest4(value = "value",aaa = 99.5,bbb={"a","b","c"})
public class Demo {
    @Mytest4(value = "value2",aaa = 99.9,bbb={"a","b","c"})
    public void test(){
        
    }
}

定义AnnotationTest3测试类

public class AnnotationTest3 {
    public void parseClass(){
        //1.先得到Class对象
        Class c= Demo.class;
        //2.解析类上的注解
        //判断类上是否包含某个注解
        if(c.isAnnotationPresent(Mytest4.class)){
            Mytest4 mytest4=(Mytest4) c.getDeclaredAnnotation(Mytest4.class);
            System.out.println(mytest4.value());
            System.out.println(mytest4.aaa());
            System.out.println(Arrays.toString(mytest4.bbb()));
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

火爆进行中的抖音双11好物节,巨量引擎助5大行业商家开启爆单之路!

抖音双11好物节目前正在火热进行中,进入爆发期,各大商家“好招”频出,都想要实现高速增长。依托“人群、货品、流量”三大优势,巨量引擎一直都是商家生意增长的给力伙伴,在今年的抖音双11好物节,巨量引擎就…

第 371 场 LeetCode 周赛题解

A 找出强数对的最大异或值 I 模拟 class Solution { public:int maximumStrongPairXor(vector<int> &nums) {int n nums.size();int res 0;for (auto x: nums)for (auto y: nums)if (abs(x - y) < min(x, y))res max(res, x ^ y);return res;} };B 高访问员工 …

通信世界扫盲基础二(原理部分)

上次我们刚学习了关于通信4/G的组成和一些通识&#xff0c;今天我们来更深层次了解一些原理以及一些新的基础~ 目录 专业名词 LTE(4G系统) EPC s1 E-UTRAN UE UU X2 eNodeB NR(5G系统) NGC/5GC NG NG-RAN Xn gNodeB N26接口 手机的两种状态 空闲态 连接态 …

Halcon WPF 开发学习笔记(3):WPF+Halcon初步开发

文章目录 前言在MainWindow.xaml里面导入Halcon命名空间WPF简单调用Halcon创建矩形 前言 本章会简单讲解如何调用Halcon组件和接口&#xff0c;因为我们是进行混合开发模式。即核心脚本在平台调试&#xff0c;辅助脚本C#直接调用。 在MainWindow.xaml里面导入Halcon命名空间 …

Leetcode—765.情侣牵手【困难】

2023每日刷题&#xff08;二十七&#xff09; Leetcode—765.情侣牵手 并查集置换环思路 参考自ylb 实现代码 class Solution { public:int minSwapsCouples(vector<int>& row) {int n row.size();int len n / 2;vector<int> p(len);iota(p.begin(), p.…

探索项目管理软件的多重用途和益处

项目管理软件俨然成了当下项目管理话题中的热门词条&#xff0c;作为一个辅助性管理工具&#xff0c;项目管理软件有什么用&#xff1f;真的值得购入吗&#xff1f; 什么是项目管理软件 顾名思义&#xff0c;项目管理软件就是指在项目管理过程使用的各种软件工具。项目管理软件…

「Verilog学习笔记」4bit超前进位加法器电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 timescale 1ns/1nsmodule lca_4(input [3:0] A_in ,input [3:0] B_in ,input C_1 ,output wire CO ,output wire [3:0] …

docker启动某个镜像一直restarting状态

因为微服务学习的需要&#xff0c;就需要在虚拟机中安装一下Nacos&#xff0c;可哪儿能想到使用docker ps命令一直显示nacos的状态是restarting。 经过一番测试&#xff0c;发现并不是执行代码的问题。上网查了一下&#xff0c;也找不到合适的答案&#xff0c;终于查到了是doc…

高级项目管理总结

目录 一、背景介绍二、思路&方案三、过程1.升维思考2.结构化3.心理、知识阶段检验4.微观 四、总结 一、背景介绍 天性对学习对考试充满敌意的我&#xff0c;转变为依赖学习谋生&#xff0c;再到后来书中自有黄金屋&#xff0c;到现在学习对我而言就如同一日三餐&#xff1…

【linux】centos7 yum安装mysql 5.7

查看系统中是否已安装 MySQL 服务 yum list installed | grep mysql下载 mysql57的 yum 源 wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm查看下载 ll 安装源 rpm -ivh mysql57-community-release-el7-8.noarch.rpm安装 MySQL yum install mysql…

TMSRL

Z是学到的子空间表征 辅助信息 作者未提供代码

HPV专家谭巍主任讲述:家庭日常有效预防HPV病毒的办法

HPV&#xff0c;即人乳头瘤病毒&#xff0c;是一种常见且具有传染性的微小DNA病毒。可以通过直接接触感染&#xff0c;也可以通过间接接触感染。在家庭生活中&#xff0c;预防HPV病毒传播十分重要。为了提高大众防范意识&#xff0c;下面劲松HPV防治诊疗中心主任谭巍将介绍一些…

yolo系列报错(持续补充ing)

文章目录 export GIT_PYTHON_REFRESHquiet解决 没有pt权重文件解决 python文件路径报错解决 读取文件列名报错解决 导入不同文件夹出错解决 megengine没有安装解决然后你发现它竟然还没有用 export GIT_PYTHON_REFRESHquiet 设置环境变量 GIT_PYTHON_REFRESH &#xff0c;这个…

JavaScript从入门到精通系列第三十五篇:JavaScript中的DOM简介

文章目录 前言 1&#xff1a;对象分类 2&#xff1a;宿主对象 一&#xff1a;DOM 1&#xff1a;dom简介 2&#xff1a;Dom概念图示 二&#xff1a;节点 1&#xff1a;节点概述 2&#xff1a;常用节点分类 3&#xff1a;节点模型示意图 4&#xff1a;节点属性 5&…

fetch函数没有默认超时时间的配置吗

chatgpt&#xff1a; https://chat.xutongbao.top/ 截至我知识的最后更新时间&#xff08;2023年&#xff09;&#xff0c;原生的 fetch API 在大多数浏览器中并没有内置的默认超时时间。这意味着如果你没有明确地设置一个超时期限&#xff0c;fetch 请求可能会永远挂起&…

数据结构-静态查找、二分查找、分块查找

静态查找 在静态查找表中&#xff0c;我们只允许下面两件事&#xff1a; 1.在查找表中查找某个记录是否在表中 2.查找表中记录的各个属性 动态查找 在动态查找表中&#xff0c;我们允许四件事&#xff1a; 1.在查找表中查找某个记录是否在表中 2.查找表中记录的各个属性…

国际阿里云:Windows实例中数据恢复教程!!!

在处理磁盘相关问题时&#xff0c;您可能会碰到操作系统中数据盘分区丢失的情况。本文介绍了Windows系统下常见的数据盘分区丢失的问题以及对应的处理方法&#xff0c;同时提供了使用云盘的常见误区以及最佳实践&#xff0c;避免可能的数据丢失风险。 前提条件 已注册阿里云账…

财务报告是什么

财务报告是什么 财务报告是企业对外提供的反映企业某一特定日期的财务状况和某一会计期间的经营成果、现金流量等会计信息的文件。 根据财务报告的定义&#xff0c;财务报告具有以下几层含义&#xff1a;一是财务报告应当是对外报告&#xff0c;其服务对象主要是投资者、债权人…

HCIA-经典综合实验(一)

经典综合实验&#xff08;一&#xff09; 实验拓扑配置步骤第一步&#xff1a;配置二层VLAN第二步&#xff1a;配置IP地址第三步&#xff1a;配置DHCP服务第四步&#xff1a;配置路由协议OSPF第五步&#xff1a;配置ACLNATTelnet 配置验证测试PC1能不能telnet登录到R1测试所有P…

Ubuntu取消sudo的输入密码

Ubuntu最近要安装软件&#xff0c;每次sudo都要输入一次密码&#xff0c;感觉很麻烦&#xff0c;于是想能不能设置为不输入密码&#xff0c;在网上找了一下解决办法。 主要参考这篇文章&#xff1a; Ubuntu取消sudo时输入密码 上面这篇文章使用的是vim&#xff0c;但是按照博…