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

Java --- 注解(Annotation)

一.什么是注解?

在Java中,注解(Annotation)是一种元数据(metadata),它为程序中的类、方法、字段等提供额外的描述信息。注解本身不直接改变程序的行为,但可以被编译器、开发工具、框架(如Spring、Hibernate等)以及运行时反射机制使用,从而影响程序的执行或者辅助生成代码、验证等操作。

注解在Java中被广泛用于:

  • 编译时的代码检查
  • 代码生成
  • 配置元数据
  • 框架驱动的行为(例如,Spring中使用的注解)

二.注解的组成与使用:

Java中的注解通常由@符号开始,可以附加到类、方法、字段、参数、构造器等元素上。注解可以包含元素(属性),这些元素可以具有默认值。例如下面代码:

public @interface MyAnnotation {String value() default "default value";  // 元素,带默认值int count() default 0;                   // 另一个元素,带默认值
}

1.定义注解:

注解的元素类似于接口的方法,不能有方法体,且可以指定默认值。

public @interface 注解名 {// 元素(即注解的属性)类型 元素名() default 默认值;  // 默认值可选
}

2.使用注解:

(1)自定义一个注解:

// 定义一个注解
public @interface MyAnnotation {String value() default "Hello, Annotation!";  // 一个带默认值的元素
}

(2)使用注解:

@MyAnnotation(value = "Custom Value")  // 为注解指定参数
public class MyClass {public void myMethod() {System.out.println("Method with annotation.");}
}

(3)使用反射读取注解:

使用反射可以在运行时读取注解,示例代码如下:

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;public class AnnotationExample {public static void main(String[] args) throws Exception {Class<MyClass> clazz = MyClass.class;Method method = clazz.getMethod("myMethod");// 判断方法是否有 @MyAnnotation 注解if (method.isAnnotationPresent(MyAnnotation.class)) {// 获取注解对象MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);System.out.println("Annotation value: " + myAnnotation.value()); // Annotation value: Custom Value}}
}

三.常见的内置注解:

Java 提供了一些常用的内置注解,用于指定类、方法或字段的特殊含义。最常见的内置注解包括:

  • @Override:用于标记一个方法是重写父类的方法。
  • @Deprecated:标记一个方法或类是过时的,提示开发者不要再使用它。
  • @SuppressWarnings:用于抑制编译器的警告。
  • @FunctionalInterface:标记一个接口是函数式接口(即只有一个抽象方法的接口)。

 四.元注解:

Java还提供了元注解(用于注解其他注解)来定义注解的行为。这些元注解包括:

  • @Retention:指定注解的生命周期(源代码、编译期、运行期)。
  • @Target:指定注解可以应用的地方(类、方法、字段、参数等)。
  • @Documented:指示将此注解包含在Javadoc中。
  • @Inherited:指示子类可以继承父类的注解。
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;// RetentionPolicy.RUNTIME 表示该注解在运行时可用
@Retention(RetentionPolicy.RUNTIME)
// Target指定注解只能用于方法
@Target(ElementType.METHOD)
public @interface MyRuntimeAnnotation {String value();
}

注解的生命周期由@Retention元注解决定,Java提供了以下几种不同的生命周期:

  • RetentionPolicy.SOURCE:注解仅存在于源代码中,编译后会被丢弃。
  • RetentionPolicy.CLASS:注解会保留到编译后的.class文件中,但JVM在运行时忽略它。
  • RetentionPolicy.RUNTIME:注解会保留到运行时,并可以通过反射读取。

有关使用注解进行开发请见下面文章:AOP面向切面编程的代码实现_aop切面编程代码-CSDN博客 

相关文章:

Java --- 注解(Annotation)

一.什么是注解&#xff1f; 在Java中&#xff0c;注解&#xff08;Annotation&#xff09;是一种元数据&#xff08;metadata&#xff09;&#xff0c;它为程序中的类、方法、字段等提供额外的描述信息。注解本身不直接改变程序的行为&#xff0c;但可以被编译器、开发工具、框…...

nodejs作为provider接入nacos

需求&#xff1a;公司产品一直是nodejs的后台&#xff0c;采用的eggjs框架&#xff0c;也不是最新版本&#xff0c;现有有需求需求将这些应用集成到微服务的注册中心&#xff0c;领导要求用java。 思路&#xff1a;用spring cloud gateway将需要暴露的接口url转发&#xff0c;…...

SpringBoot3+Micormeter监控应用指标

监控内容简介 SpringBoot3项目监控服务 &#xff0c;可以使用Micormeter度量指标库&#xff0c;帮助我们监控应用程序的度量指标&#xff0c;并将其发送到Prometheus中并用Grafana展示。监控指标有系统负载、内存使用情况、应用程序的响应时间、吞吐量、错误率等。 micromete…...

Mybatis-plus 简单使用,mybatis-plus 分页模糊查询报500 的错

一、mybtis-plus配置下载 MyBatis-Plus 是一个 Mybatis 增强版工具&#xff0c;在 MyBatis 上扩充了其他功能没有改变其基本功能&#xff0c;为了简化开发提交效率而存在。 具体的介绍请参见官方文档。 官网文档地址&#xff1a;mybatis-plus 添加mybatis-plus依赖 <depe…...

2022 年 12 月青少年软编等考 C 语言三级真题解析

目录 T1. 鸡兔同笼思路分析T2. 猴子吃桃思路分析T3. 括号匹配问题T4. 上台阶思路分析T5. 田忌赛马T1. 鸡兔同笼 一个笼子里面关了鸡和兔子(鸡有 2 2 2 只脚,兔子有 4 4 4 只脚,没有例外)。已经知道了笼子里面脚的总数 a a a,问笼子里面至少有多少只动物,至多有多少只…...

webpack 题目

文章目录 webpack 中 chunkHash 和 contentHash 的区别loader和plugin的区别&#xff1f;webpack 处理 image 是用哪个 loader&#xff0c;限制 image 大小的是...&#xff1b;webpack 如何优化打包速度 webpack 中 chunkHash 和 contentHash 的区别 主要从四方面来讲一下区别&…...

【MySQL】视图详解

视图详解 一、视图的概念二、视图的常用操作2.1创建视图2.2查询视图2.3修改视图2.4 删除视图2.5向视图中插入数据 三、视图的检查选项3.1 cascaded&#xff08;级联 &#xff09;3.2 local(本地) 四、视图的作用 一、视图的概念 视图&#xff08;View&#xff09;是一种虚拟存…...

第一节:ORIN NX介绍与基于sdkmanager的镜像烧录(包含ubuntu文件系统/CUDA/OpenCV/cudnn/TensorRT)

ORIN NX技术参数 Orin NX版本对比 如上图所示,ORIN NX官方发布的版本有两个版本一个版本是70TOPS算力,DDR为8GB的版本低配版本,一个是100TOPS算法,DDR为16GB的高配版本。 Orin NX的外设框图 两个版本除了GPU和DDR的差距外,外设基本上没有区别,丰富的外设接口,后续开发…...

2024-12-04OpenCV视频处理基础

OpenCV视频处理基础 OpenCV的视频教学&#xff1a;https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV视频捕获 在 OpenCV 中&#xff0c;cv2.VideoCapture() 是一个用于捕获视频流的类。它可以用来从摄像头捕获实时视频&#xff0c;或者从视频文件中读取帧。以下是如何使用…...

D89【python 接口自动化学习】- pytest基础用法

day89 pytest的setup&#xff0c;setdown详解 学习日期&#xff1a;20241205 学习目标&#xff1a;pytest基础用法 -- pytest的setup&#xff0c;setdown详解 学习笔记&#xff1a; setup、teardown详解 模块级 setup_module/teardown_module 开始于模块始末&#xff0c;生…...

七、docker registry

七、docker registry 7.1 了解Docker Registry 7.1.1 介绍 registry 用于保存docker 镜像&#xff0c;包括镜像的层次结构和元数据。启动容器时&#xff0c;docker daemon会试图从本地获取相关的镜像&#xff1b;本地镜像不存在时&#xff0c;其将从registry中下载该镜像并保…...

FlightGear+MATLAB+飞行手柄实现实时飞控视景系统

文章目录 一、软件配置二、FlightGearMATLAB联合仿真第一步 复制文件第二步 新建文件夹第三步 打开demo第四步 demo说明第五步 打开Simulink第六步 连接FlightGear第七步 设置FlightGear第八步 生成FlightGear连接文件FlightGear的设置Network的设置File的设置生成.bat文件 第九…...

深入 Java 基础 XML:高级特性与最佳实践

在上一篇文章中&#xff0c;我们对 Java 基础 XML 有了一个初步的认识&#xff0c;了解了 XML 的基本结构以及在 Java 中常见的解析方式。今天&#xff0c;我们将进一步深入探讨 Java 与 XML 的结合&#xff0c;包括一些高级特性和最佳实践。 一、XML 命名空间 在复杂的 XML …...

【论文阅读】Fifty Years of the ISCA: A Data-Driven Retrospective

学习体会&#xff1a; ISCA会议近五十年文章分析, 了解论文热点方向, 处理器依旧是热点! AI和并行是大趋势, 做XPU相关目前来说还是热点~ 摘录自原文 摘录: 数据来源和分析方法&#xff1a; 作者收集了 ACM 数字图书馆中所有 ISCA 论文&#xff0c;并使用 DBLP、Google Schol…...

TVbox源贡献指南

欢迎各路大佬踊跃提PR&#xff0c;分享爬虫代码。 源码仓库地址 https://github.com/lushunming/AndroidCatVodSpider 快速开始 本工程是一个完整的AndroidStudio工程&#xff0c;请你用AS打开编辑。 工程调试完毕后要需要导出生成jar文件配合软件使用&#xff0c;执行根目…...

qt数据类型定义(包含签名)

先推荐一个处理markdown表格的网站&#xff0c;超级好用&#xff1a;markdown表格处理&#xff0c;我就是用这个表格处理的excel中的数据上传。 下表整理了数据类型的值范围、签名、qt如何定义等内容。 类型范围/子类型dbus签名qt支持的签名qt类型定义方式转换为variantint8(…...

docker逃逸总结

一、 检查是否在docker容器中 通过以下两个地方来判断 # 是否存在此文件 ls -al /.dockerenv# 在其中是否包含docker字符串 cat /proc/1/cgroup除了上面两种外还有其他方式判断&#xff0c;如检测mount、fdisk -l查看硬盘 、判断PID 1的进程名等也可用来辅助判断。 容器逃逸…...

MySql:表的操作

目录 创建表 查看创建表时的信息 查看表的结构描述 删除一张表 修改表 创建表 CREATE TABLE [IF NOT EXISTS] table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; field 表示列名 datatype 表示…...

LVGL9 开关控件 (lv_switch) 使用指南

文章目录 前言主体1. **控件概述**2. **控件的样式和组成部分**3. **使用控件**改变开关状态 4. **事件处理**5. **按键支持**6. **示例代码** 总结 前言 lv_switch 是 LittlevGL 提供的一个开关控件&#xff0c;外观类似一个小型滑块&#xff0c;常用于实现开关功能&#xff…...

fastadmin 登录退出忽略中间提示页面

背景 研究了一圈CMS&#xff0c;从fastadmin、easyadmin、buildadmin、onethink等等几乎所有的框架CMS&#xff0c;当然也包括若依。 最后&#xff0c;根据当前项目综合考虑&#xff0c;还是选择的fastadmin&#xff1a; 预算经济实惠、维护成本低&#xff1b;工期端&#x…...

内容创作团队如何借助Taotoken统一调度多个模型提升内容多样性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 内容创作团队如何借助Taotoken统一调度多个模型提升内容多样性 对于自媒体、内容运营或数字营销团队而言&#xff0c;持续产出高质…...

Simics在网络转型与SDN迁移中的核心价值与应用

1. Simics在网络转型与SDN迁移中的核心价值解析网络架构正经历从传统硬件设备向软件定义网络(SDN)和网络功能虚拟化(NFV)的深刻变革。这场变革的核心挑战在于&#xff1a;如何在保持网络高性能的同时&#xff0c;实现控制平面与数据平面的解耦&#xff0c;以及如何将传统网络功…...

DRAM读干扰机制:RowHammer与RowPress的实验研究

1. DRAM读干扰问题概述DRAM&#xff08;动态随机存取存储器&#xff09;是现代计算系统中最主要的主存技术&#xff0c;其可靠性和安全性对整个系统的稳定运行至关重要。然而&#xff0c;DRAM存在一个被称为"读干扰"&#xff08;Read Disturbance&#xff09;的固有缺…...

FPGA上LUT-DNN稀疏连接优化技术SparseLUT详解

1. 项目概述在边缘计算场景中&#xff0c;FPGA因其可重构性和低功耗特性成为部署深度神经网络(DNN)的理想平台。然而传统DNN在FPGA上的实现面临资源占用高、延迟大等挑战。基于查找表(LUT)的DNN通过将神经元计算映射到FPGA原生LUT资源&#xff0c;显著提升了硬件效率。但现有LU…...

【STM32CubeMX实战】基于NRF24L01与HAL库构建稳定无线通信链路

1. NRF24L01无线模块基础认知 第一次接触NRF24L01这个火柴盒大小的模块时&#xff0c;我完全没想到它能在2.4GHz频段实现2Mbps的高速通信。这个由Nordic公司出品的射频芯片&#xff0c;特别适合嵌入式系统的无线通信需求。它的工作电压范围在1.9V到3.6V之间&#xff0c;实测在3…...

Linux重定向与管道:从文件描述符到高效命令行工作流

1. 项目概述&#xff1a;为什么重定向是命令行的效率倍增器&#xff1f;如果你在Linux命令行里混过一段时间&#xff0c;肯定遇到过这样的场景&#xff1a;想看看一个命令的输出&#xff0c;结果屏幕刷地一下滚过去几百行&#xff0c;关键信息一闪而过&#xff1b;或者想把一个…...

从IMU到UWB:拆解美国队长盾牌自主归位的嵌入式控制核心

1. 项目概述&#xff1a;从电影梦到工程挑战每个看过《美国队长》的人&#xff0c;大概都幻想过能像史蒂夫罗杰斯那样&#xff0c;潇洒地掷出那面标志性的振金盾牌&#xff0c;看着它在空中划出完美的弧线&#xff0c;击倒敌人后又精准地飞回手中。这不仅是超级英雄的浪漫&…...

你还在用自然语言写MJ提示词?专业级结构化提示词已进入Token级编排时代:详解::权重、--no冲突域、[]嵌套层级与多模态对齐原理

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;自然语言提示词的局限性与结构化范式跃迁 传统自然语言提示&#xff08;Prompt&#xff09;虽具备易用性和低门槛优势&#xff0c;但在复杂任务中暴露出显著瓶颈&#xff1a;语义模糊性、上下文敏感性弱…...

AMD Ryzen终极调试指南:7步解锁SMUDebugTool硬件级控制

AMD Ryzen终极调试指南&#xff1a;7步解锁SMUDebugTool硬件级控制 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…...

Godot 4视觉特效速写本:开源粒子与着色器实例库实战指南

1. 项目概述&#xff1a;一个为创作者准备的视觉特效“速写本”如果你是一位游戏开发者、独立创作者&#xff0c;或者对实时视觉特效&#xff08;VFX&#xff09;充满热情&#xff0c;那么你很可能和我一样&#xff0c;在寻找灵感和实现效果之间反复横跳。我们常常在社交媒体上…...