JAVA核心知识点--元注解详解

article/2025/7/4 23:38:28

608564A16E7D652E882914E830EE4050(1)

📚博客主页:代码探秘者

✨专栏:《JavaSe》 其他更新ing…

❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️

🙏作者水平有限,欢迎各位大佬指点,相互学习进步!


img

文章目录

    • 一、@Target:定义注解可应用的位置
      • 常用取值(来自 `java.lang.annotation.ElementType` 枚举):
      • 示例:
    • 二、@Retention:定义注解的生命周期(保留策略)
      • 可选值(来自 `java.lang.annotation.RetentionPolicy` 枚举):
      • 示例:
    • 三、@Documented:是否包含在 Javadoc 中
      • 说明:
      • 示例:
    • 四、@Inherited:注解是否可以被子类继承
      • 说明:
      • 示例:
    • 五、组合使用的例子
    • 小结

元注解(Meta-Annotation)用于定义注解行为,它们本身是注解,用来修饰“注解类”。下面我详细介绍一下常见元注解以及它们可以填写的值(即 参数或枚举类型的取值):


一、@Target:定义注解可应用的位置

常用取值(来自 java.lang.annotation.ElementType 枚举):

含义
TYPE类、接口、枚举、注解类
FIELD字段(成员变量)
METHOD方法
PARAMETER方法参数
CONSTRUCTOR构造方法
LOCAL_VARIABLE局部变量
ANNOTATION_TYPE注解类型(用于元注解)
PACKAGE
TYPE_PARAMETER (Java 8+)类型参数(泛型中的 T、E 等)
TYPE_USE (Java 8+)所有使用类型的地方,如泛型、强转、变量声明等

示例:

@Target({ElementType.METHOD, ElementType.TYPE})
public @interface MyAnnotation {}

二、@Retention:定义注解的生命周期(保留策略)

可选值(来自 java.lang.annotation.RetentionPolicy 枚举):

含义
SOURCE仅在源码中保留,编译后丢弃(如 @Override)
CLASS编译期保留在 class 文件中,运行时不可读取(默认)
RUNTIME运行时可通过反射读取(框架中最常用)

示例:

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {}

三、@Documented:是否包含在 Javadoc 中

说明:

  • 没有参数。
  • 加上这个注解,表示该注解使用时会被包含在生成的 Javadoc 中。

示例:

@Documented
public @interface MyAnnotation {}

四、@Inherited:注解是否可以被子类继承

说明:

  • 没有参数。
  • 仅适用于类(@Target(ElementType.TYPE));
  • 如果某个类用注解 A 标注了,子类也会“继承”这个注解(通过 getAnnotation() 可获取)。

示例:

@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {}

五、组合使用的例子

@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyLog {String value() default "";
}

小结

元注解参数类型或可选值
@TargetElementType 枚举:TYPE, FIELD, METHOD, …
@RetentionRetentionPolicy 枚举:SOURCE, CLASS, RUNTIME
@Documented无参数
@Inherited无参数,仅作用于类注解


http://www.hkcw.cn/article/LJnFAahIJD.shtml

相关文章

微软markitdown PDF/WORD/HTML文档转Markdown格式软件整合包下载

本次和大家分享另一个微软发布的非常热门的文件文档转Markdown格式文档的软件markitdown,软件可以将PDF,word,ppt,Excel等十几种格式文档转换为markdown格式文档,我基于当前最新0.1.2版本制作了免安装一键启动整合包。…

(八)登录认证与学生写作画像

本次将赵昱琨同学之前完成的学生写作画像与智能学习路径规划的后端与目前已有的后端框架进行整合。同时为了实现学生写作画像与智能学习路径规划,需要在之前简易的登录系统上进行重构,所以本次大规模重写了登录模块,同时发现很多过去冗余的代…

【agent开发】部署LLM(一)

本周基本就是在踩坑,没什么实质性的进展 下载模型文件 推荐一个网站,可以简单计算下模型推理需要多大显存:https://apxml.com/tools/vram-calculator 我的显卡是RTX 4070,有12GB的显存,部署一个1.7B的Qwen3应该问题…

【Linux】pthread多线程基础

参考博客:https://blog.csdn.net/Alkaid2000/article/details/128121066 线程概述 与进程类似,线程(thread)是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程。同一个程序中的所有线程均会独立执行相同程序,且共享同一份…

瑞萨CS+ for CC V8.13.00环境安装教程

前言:最近接触到瑞萨的芯片,需要安装对应的集成开发环境,发现这与ARM内核的单片机存在很大的不同,这里先简单介绍一下其IDE的安装配置方式。 1,官网下载 瑞萨半导体开发环境安装网址 CS | Renesas 当然在下载安装包之…

【知识点】第3章:基本数据类型

文章目录 知识点整理数字类型字符类型 练习题判断题程序题 知识点整理 数字类型 Python语言提供整数、浮点数、复数3种数字类型。 不同进制的引导符号: 不考查进制间的转换。 浮点数类型与数学中实数的概念一致,表示带有小数的数值。Python语言要求所…

【算法】回溯法

一、回溯法的基本思想 回溯法有“通用解题方法”的美称,解题过程是一个搜索过程。在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回(也就是递归返回),尝试别的路径。因此&#xff0…

AIGC 基础篇 高等数学篇 01函数与极限

声明:本文章仅用于博主本人复习,请不要将本文章当成预习篇或者讲解篇 此外,此文章不会包含全部的高等数学知识,仅仅是为了学习AI而进行的前期学习,因此知识含量不会很多,由于博主是第一次尝试做&#xff0…

如何在 Windows 11 Home 版上下载和安装 Hyper-V

Windows 11 Home 版与之前的微软操作系统版本一样,没有自带 Hyper-V 管理器。因此,如果您想在 Windows 11 Home 上下载和安装 Hyper-V,以下是详细的步骤教程。 Hyper-V 是微软提供的一种虚拟化解决方案,允许用户为各种操作系统创建虚拟机。与 VMware 或 VirtualBox 不同,…

C++ --- string类的简单实现

string类的简单实现 前言1、基本成员2、构造方法和析构方法2.1无参构造2.2有参构造2.3析构函数2.4拷贝构造函数 3、遍历方式3.1operator [ ]3.2iterator3.2.1正向迭代器3.2.2const正向迭代器 3.3范围for 4、常用方法,运算符重载c_str()size()reverse()push_back()po…

ESP32之Linux编译环境搭建流程

背景:为了解决 “windows环境中编译ESP32代码速度慢” 的问题,现搭建一个Linux环境,让windows下的VScode连接到Linux环境,VSCode负责编辑代码,虚拟机用于编译代码。 目录 一、安装VMware 1.1 获取VMware安装包 1.2…

Python-matplotlib中的Pyplot API和面向对象 API

matplotlib中的Pyplot API和面向对象 API Pyplot API(状态机模式)面向对象 API 详解二者差别核心区别方法命名差异注意事项差别举例 🍅 Pyplot API(状态机模式)和面向对象 API 是两种不同的编程接口.🍅 它们…

BUUCTF之[ACTF2020 新生赛]BackupFile

打开环境就一句话 找出源文件! 结合题目名字&#xff1a;BackupFile 先用dirsearct扫描网站文件 发现一个index.php.bak ,拼接url下载 打开发现php代码 <?php include_once "flag.php";if(isset($_GET[key])) {$key $_GET[key];if(!is_numeric($key)) {exit…

Spring Boot 3.X 下Redis缓存的尝试(一):初步尝试

背景 想像一下有这么一个场景&#xff0c;一个系统有超多角色、角色下有多个菜单、菜单下有多个按钮权限&#xff0c;这种子父级关系查询每次向数据库查询相当耗时&#xff0c;那么我们是否可以将这种更新频次不高&#xff0c;而查询耗时的数据且不直接影响业务的数据放进缓存中…

基于springboot的民间文化艺术品销售系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

9 动态规划

9.3 爬楼梯 从1开始举例子发现规律 dp[i]dp[i-1]dp[i-2]; class Solution { public:int climbStairs(int n) {if(n<1){return 1;}vector<int>dp(n1);dp[2]2;dp[1]1;for(int i3;i<n;i){dp[i]dp[i-1]dp[i-2];}return dp[n];} }; 9.29 打家劫舍 1 确定dp数组下标与…

Playwright 测试框架 - Node.js

🚀超全实战:基于 Playwright + Node.js 的自动化测试项目教程【附源码】 📌 本文适合自动化测试入门者 & 前端测试实战者。从零开始手把手教你搭建一个 Playwright + Node.js 项目,涵盖配置、测试用例编写、运行与调试、报告生成以及实用进阶技巧。建议收藏!👍 �…

4.RV1126-OPENCV 图像轮廓识别

一.图像识别API 1.图像识别作用 它常用于视觉任务、目标检测、图像分割等等。在 OPENCV 中通常使用 Canny 函数、findContours 函数、drawContours 函数结合在一起去做轮廓的形检测。 2.常用的API findContours 函数&#xff1a;用于寻找图片的轮廓&#xff0c;并把所有的数…

Cursor从入门到精通实战指南(五):一键生成流程图/架构图,开发者必备收藏!

解锁Cursor&#xff1a;开启高效开发新境界 结合了GPT-4、Claude 3.5等强大的大语言模型&#xff0c;能够通过自然语言交互实现代码生成、原型设计、流程优化等功能。无论是编程新手还是经验丰富的开发者&#xff0c;都能借助Cursor的智能特性&#xff0c;快速完成复杂的编码任…

postman工具使用

基本功能操作 常用断言 定义&#xff1a;postman 断言借助 JavaScript - js 语言编写代码&#xff0c;自动判断预期结果与实际结果是否一致。&#xff08; 注意断言 代码写在 Tests 的标签中&#xff09; 断言响应状态码 断言响应体是否包含某个字符串&#xff08;Response bo…