【Java】注解(Annotation)

news2024/11/20 8:33:42

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()));
        }
    }
}

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

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

相关文章

零基础学习Matlab,适合入门级新手,了解Matlab

一、认识Matlab Matlab安装请参见博客 安装步骤 1.界面 2.清空环境变量及命令 (1)clear all :清除Workspace中的所有变量 (2)clc:清除Command Window中的所有命令 二、Matlab基础 1.变量命名规则 &a…

第1关:完整的包装类

题目: 根据给定头文件写cpp文件 /********** BEGIN **********/ #include"Int.h"int Int::getValue()const{return value;} void Int::setValue(int v){valuev;} Int::Int(){value0;} Int::Int(int v){valuev;} Int::Int(const Int&rhs){this->v…

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

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

通过结构间比值比较迭代次数

( A, B )---3-30-2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点,A有5个点,B全是0,排列组合。让A,B训练集分别有3,4,5,6张图片,统计迭代次数并排序。 先比较图片数量是3和4的情况 n4 迭代次数…

HTML5+CSS3+Vue小实例:输入框打字放大特效

实例:输入框打字放大特效 技术栈:HTML+CSSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&…

数据架构与数据模型

数据架构&#xff1a; 待定 数据模型&#xff1a; 数据模型是对现实世界数据特征的抽象&#xff0c;用于描述一组数据的概念和定义。数据模型从抽象层次上描述了数据的静态特征、动态行为和约束条件。数据模型所描述的内容有三部分&#xff0c;分别是数据结构、数据操作和数…

【数据结构】入队序列出队序列问题(以21年408真题举例)

题型说明 一般是一个队列&#xff0c;其中一边可以入队&#xff0c;另一边可以入队和出队只可入队的含义是从这个方向是以队列形式存在可以入队和出队表示此边以堆形式存在 怎么分析&#xff1f; 以21年408真题举例 考点分析 出队序列存在两种情况&#xff1a;入之后就出&…

外部董事的职责与作用

&#xff08;一&#xff09;监督公司的管理与运营 外部董事在公司治理中的一个重要职责就是监督公司的管理与运营&#xff0c;监督公司管理层是否有效执行公司战略、规章制度和内控机制&#xff0c;帮助公司识别管理和运营上的问题&#xff0c;从而提供正确的决策和解决方案。比…

大二第四周总结——用原生js封装一个分页器

用原生js封装一个分页器 起因&#xff1a;这次项目还是用原生的js来写的&#xff0c;我负责的是后台&#xff0c;分页是后台最常见的一个功能了&#xff0c;于是干脆封装一下,废话少说&#xff0c;直接上代码 这里是基本的样式 .pagination {display: flex;width: 600px;hei…

windows HOOK学习(一)

了解HOOK 一&#xff1a;HOOK是什么&#xff1f;二&#xff1a;HOOK的分类三&#xff1a;HOOK的原理&#xff1f;四&#xff1a;为什么全局钩子HOOK必须写到DLL中&#xff1f;五&#xff1a;HOOK的类型 一&#xff1a;HOOK是什么&#xff1f; hook就是我们平时听到的钩子&…

Arduino ESP8266使用AliyunIoTSDK.h连接阿里云物联网平台

文章目录 1、AliyunIoTSDK简介2、相关库安装3、阿里云创建产品&#xff0c;订阅发布4、对开源的Arduino ESP8266源代码修改5、使用阿里云点亮一个LED灯6、设备向阿里云上传温度数据7、项目源码 1、AliyunIoTSDK简介 AliyunIoTSDK是arduino的一个库&#xff0c;可以在arduino的…

第 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 高访问员工 …

Maya 2024 for Mac(3D建模软件)

Maya 2024是一款三维计算机图形软件&#xff0c;具有强大的建模、动画、渲染、特效等功能&#xff0c;广泛应用于影视、游戏、广告等行业。以下是Maya 2024软件的主要功能介绍&#xff1a; 建模&#xff1a;Maya 2024具有强大的建模工具&#xff0c;包括多边形建模、曲面建模、…

Technology Strategy Patterns 学习笔记6-Communicating the Strategy-Approach Patterns

1 30-Second Answer 1.1 类似麦肯锡电梯谈话 Map an outline of three bullet points in your head, and then give the executives the simple, declarative, definitive answerAdd your three reasons or characterizations with your three bullet points also as high-le…

计算机网络——b站王道考研笔记

第一章 计算机网络体系结构 1.计算机网络概述 &#xff08;1&#xff09;概念 计算机网络是一个将分散的&#xff0c;具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统&#xff1b; 是互连的&#…

第18章 类集框架

通过本章需要掌握Java设置类集的主要目的与实现原理&#xff0c;掌握Collection接口的作用及小狐妖操作方法&#xff0c;掌握Collection子接口List、Set的区别及常用子类的使用与核心实现原理&#xff0c;掌握Map接口的作用及与Collection接口的区别&#xff0c;理解Map接口设计…

云原生 黑马Kubernetes教程(K8S教程)笔记——kubernetes介绍。Master集群控制节点、Node工作负载节点、Pod控制单元

参考文章&#xff1a;kubernetes介绍 文章目录 1. Kubernetes介绍1.1 应用部署方式演变传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上虚拟化部署&#xff1a;可以在一台物理机上运行多个虚拟机&#xff0c;每个虚拟机都是独立的一个环境&#xff…

jQuery和BootStrap

文章目录 jQuery1、jQuery介绍2、jQuery的选择器2.1、直接查找2.2、导航查找 3、jQuery的绑定事件4、jQuery的操作标签5、jQuery的动画5.1、基本方法5.2、自定义动画 6、扩展方法 (插件机制)7、BootStrap jQuery 1、jQuery介绍 jQuery是什么 jQuery是一个快速、简洁的JavaSc…

前端面试题 计算机网络

文章目录 ios 7层协议tcp协议和udp协议的区别tcp协议如何确保数据的可靠http和tcp的关系url输入地址到呈现网页有哪些步骤post和get本质区别&#xff0c;什么时候会触发二次预检GET请求&#xff1a;POST请求&#xff1a;触发二次预检&#xff08;CORS中的预检请求&#xff09;&…