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

【Java 注解,自定义注解,元注解,注解本质,注解解析】

文章目录

    • 什么是注解?
    • Java内置注解
    • 自定义注解
    • 元注解
    • 注解的本质
    • 注解解析

什么是注解?

注解是Java编程语言中的一种元数据,提供了有关程序的额外信息。注解以@符号开始,紧跟着注解的名称和一对括号,括号内包含注解的参数(如果有的话)。注解可以应用在类、方法、字段和其他程序元素上,以提供有关这些元素的信息。

Java内置注解

  1. @Override: 用于标记方法覆盖了父类中的方法。
  2. @Deprecated: 表示某个元素(如方法或类)已被弃用,不建议使用。
  3. @SuppressWarnings: 用于抑制编译器警告。

自定义注解

除了内置注解,Java还允许创建自定义注解。自定义注解允许在代码中添加自定义的元数据信息,以满足特定需求。要创建自定义注解,需要使用@interface关键字:

public @interface MyAnnotation {String value();int version() default 1;
}

上面的代码定义了一个名为MyAnnotation的自定义注解,它具有两个成员:valueversion。成员可以包含不同类型的数据,如字符串、整数等,并且可以设置默认值。

元注解

元注解是用于注解其他注解的注解。Java中有几种常用的元注解,包括:

  1. @Target: 用于指定注解可以应用的目标元素,如类、方法、字段等。
  2. @Retention: 用于指定注解在什么级别可用,包括源代码、编译时和运行时。
  3. @Documented: 用于指定注解是否应该包含在Java文档中。
  4. @Inherited: 用于指定注解是否可以被子类继承。

注解的本质

在Java中,注解本质上是一个接口,编译器会将注解转化为实现该接口的类。这个类会包含注解的成员变量,并提供用于访问这些成员变量的方法。在运行时,可以使用Java的反射机制来访问和解析注解信息。

注解解析

要解析注解,需要使用Java的反射机制。

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;public class AnnotationParser {public static void main(String[] args) {Class<?> clazz = MyClass.class;Method[] methods = clazz.getDeclaredMethods();for (Method method : methods) {if (method.isAnnotationPresent(MyAnnotation.class)) {MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);System.out.println("Method: " + method.getName());System.out.println("Value: " + annotation.value());System.out.println("Version: " + annotation.version());}}}
}

在上例中,首先获取类的方法,然后检查每个方法是否带有MyAnnotation注解。如果有,就可以使用getAnnotation方法获取注解的实例,并访问其成员变量。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • STM32(一):安装环境
  • MySQL创建新用户并赋予指定数据库权限
  • centos系统查找mysql的配置文件位置
  • iOS UITableView自带滑动手势和父视图添加滑动手势冲突响应机制探索
  • 数据结构基础--------【二叉树基础】
  • 视频共享交换平台LntonCVS视频监控平台智慧加油站安全管理方案
  • Haproxy搭建Web群集
  • (一)、python程序--模拟电脑鼠走迷宫
  • element plus 实现跨页面+跨tab栏多选
  • RK3568平台(opencv篇)opencv处理图像视频
  • 雅思词汇及发音积累 2024.7.10
  • Python 轻松生成多种条形码、二维码 (Code 128、EAN-13、QR code等)
  • 5个在线地图瓦片URL分享
  • nginx的知识面试易考点
  • PTC可复位保险丝 vs 传统型保险丝:全面对比分析
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【Linux系统编程】快速查找errno错误码信息
  • 2019年如何成为全栈工程师?
  • Angularjs之国际化
  • Elasticsearch 参考指南(升级前重新索引)
  • emacs初体验
  • es的写入过程
  • flutter的key在widget list的作用以及必要性
  • IDEA 插件开发入门教程
  • javascript数组去重/查找/插入/删除
  • JavaScript学习总结——原型
  • java多线程
  • Laravel 菜鸟晋级之路
  • Linux下的乱码问题
  • NSTimer学习笔记
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • vue数据传递--我有特殊的实现技巧
  • Vue小说阅读器(仿追书神器)
  • 工作中总结前端开发流程--vue项目
  • 前端路由实现-history
  • 前端性能优化--懒加载和预加载
  • 如何在GitHub上创建个人博客
  • 微信开源mars源码分析1—上层samples分析
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (16)Reactor的测试——响应式Spring的道法术器
  • (7)STL算法之交换赋值
  • (8)STL算法之替换
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (论文阅读11/100)Fast R-CNN
  • (七)Knockout 创建自定义绑定
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)【Jmeter】 JMeter的界面布局与组件概述