当前位置: 首页 > 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博客 

http://www.lryc.cn/news/500227.html

相关文章:

  • nodejs作为provider接入nacos
  • SpringBoot3+Micormeter监控应用指标
  • Mybatis-plus 简单使用,mybatis-plus 分页模糊查询报500 的错
  • 2022 年 12 月青少年软编等考 C 语言三级真题解析
  • webpack 题目
  • 【MySQL】视图详解
  • 第一节:ORIN NX介绍与基于sdkmanager的镜像烧录(包含ubuntu文件系统/CUDA/OpenCV/cudnn/TensorRT)
  • 2024-12-04OpenCV视频处理基础
  • D89【python 接口自动化学习】- pytest基础用法
  • 七、docker registry
  • FlightGear+MATLAB+飞行手柄实现实时飞控视景系统
  • 深入 Java 基础 XML:高级特性与最佳实践
  • 【论文阅读】Fifty Years of the ISCA: A Data-Driven Retrospective
  • TVbox源贡献指南
  • qt数据类型定义(包含签名)
  • docker逃逸总结
  • MySql:表的操作
  • LVGL9 开关控件 (lv_switch) 使用指南
  • fastadmin 登录退出忽略中间提示页面
  • 游戏引擎学习第36天
  • 准确率99.9%的离线IP地址定位库 ip2region - python 示例
  • wordpress网站使用Linux宝塔面板和SQL命令行导入导出超过50M限制的数据库
  • 开发基础(3):开发应用沉浸式效果 组件安全区方案
  • Python中的数据可视化实战
  • 计算机毕设-基于springboot的甜品店管理系统的设计与实现(附源码+lw+ppt+开题报告)
  • SpringMVC纯注解快速开发
  • 【JAVA】Java高级:多数据源管理与Sharding:在Spring Boot应用中实现多数据源的管理
  • 汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全
  • 黑马点评项目测试总结
  • 【Selenium】基于 WebDriverWait 爬取带有懒加载的静态页面