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

java注解的概念与分类

Java注解(Annotations)是Java SE 5引入的一项重要特性,它允许在源代码中添加元数据(metadata),从而为编译器、工具和运行时系统提供了额外的信息。注解可以用于文档生成、编译时检查、代码生成等多种用途。

Java注解的概念

Java注解是一种特殊的标记,用来标注Java代码中的类、方法、字段、构造函数等。注解本身也是一个接口,可以包含元数据(metadata)信息。注解的主要用途包括:

  1. 文档生成:用于生成API文档。
  2. 编译时检查:用于编译时的静态分析和错误检测。
  3. 代码生成:用于自动生成代码,如ORM框架中的实体类生成。
  4. 运行时处理:用于运行时动态处理注解信息,如Spring框架中的依赖注入。

Java注解的分类

Java注解可以分为以下几类:

  1. 内置注解(Built-in Annotations)
  2. 元注解(Meta-Annotations)
  3. 自定义注解(Custom Annotations)
1. 内置注解(Built-in Annotations)

Java内置注解主要有三种,分别是@Override@Deprecated@SuppressWarnings

  • @Override:表示方法重写了父类的方法。
  • @Deprecated:表示类或方法已被废弃,建议不再使用。
  • @SuppressWarnings:表示抑制编译警告。
示例
1public class Example {
2    @Override
3    public String toString() {
4        return "Example";
5    }
6
7    @Deprecated
8    public void deprecatedMethod() {
9        // 已废弃的方法
10    }
11
12    @SuppressWarnings("unchecked")
13    public void uncheckedMethod() {
14        // 忽略编译警告
15    }
16}
2. 元注解(Meta-Annotations)

元注解是用来标注其他注解的注解。Java提供了以下几种元注解:

  • @Retention:用于指定注解的保留策略。
  • @Target:用于指定注解的目标类型。
  • @Documented:用于指定是否将注解包含在JavaDoc中。
  • @Inherited:用于指定注解是否可以被子类继承。
示例
1import java.lang.annotation.ElementType;
2import java.lang.annotation.Retention;
3import java.lang.annotation.RetentionPolicy;
4import java.lang.annotation.Target;
5
6@Retention(RetentionPolicy.RUNTIME)
7@Target(ElementType.METHOD)
8public @interface MyAnnotation {
9    String value() default "";
10}
详细说明
  • @Retention:指定注解的保留策略,可以是SOURCE(源码级)、CLASS(字节码级)或RUNTIME(运行时)。

  • @Documented:指定注解是否应该包含在JavaDoc中。

    @Inherited:指定注解是否可以被子类继承
3. 自定义注解(Custom Annotations)

自定义注解是由开发者自己定义的注解,可以包含任意数量的成员变量。自定义注解通常用于特定的应用场景。

示例
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {String value() default "";int number() default 0;
}
使用自定义注解
public class Example {@MyAnnotation(value = "Hello", number = 42)public void myMethod() {// 方法体}
}

注解的使用

1. 创建自定义注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {String value() default "";int number() default 0;
}
2. 使用自定义注解
public class Example {@MyAnnotation(value = "Hello", number = 42)public void myMethod() {// 方法体}
}
3. 处理自定义注解
import java.lang.reflect.Method;public class AnnotationProcessor {public static void processAnnotations(Object obj) {Class<?> clazz = obj.getClass();Method[] methods = clazz.getDeclaredMethods();for (Method method : methods) {if (method.isAnnotationPresent(MyAnnotation.class)) {MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);String value = annotation.value();int number = annotation.number();System.out.println("Value: " + value + ", Number: " + number);}}}
}public class Main {public static void main(String[] args) {Example example = new Example();AnnotationProcessor.processAnnotations(example);}
}

总结

Java注解是Java SE 5引入的一项重要特性,用于在源代码中添加元数据。注解可以分为三类:

  1. 内置注解:如@Override@Deprecated@SuppressWarnings
  2. 元注解:如@Retention@Target@Documented@Inherited
  3. 自定义注解:由开发者自己定义的注解,可以包含任意数量的成员变量。

通过使用注解,可以在编译时和运行时添加额外的信息,从而实现多种用途,如文档生成、编译时检查、代码生成等。掌握Java注解的基本概念和用法后,可以更好地利用注解来编写灵活和动态的应用程序。


http://www.mrgr.cn/news/36083.html

相关文章:

  • Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化
  • MySQL技巧之跨服务器数据查询:基础篇-动态参数
  • C++初阶——list
  • unity基础,点乘叉乘。
  • Ubuntu中以root身份运行Qt创建的项目
  • <el-select> :remote-method用法
  • C标准库<string.h>-str、strn开头的函数
  • FAT32格式和exfat格式的区别
  • Python Web 开发中的DevOps 实践与自动化运维
  • Vue学习(五)生命周期、组件
  • 关于预处理详解 #define 宏 #和##
  • 使用python搭建Web项目
  • 有限元方法仿真弹性体 (Finite Element Method, FEM)
  • 洛汗2保姆级辅助教程攻略:VMOS云手机辅助升级打怪!
  • SpringBoot集成阿里easyexcel(二)Excel监听以及常用工具类
  • 超详细 Git 教程:二十篇博客,三万字干货
  • 蜘蛛爬虫的ip来自机房,用户的爬虫来自于哪里
  • 2024低代码大赛火热进行,豪礼抢先看~
  • 【Linux实践】实验五:用户和组群账户管理
  • 网络原理3-应用层(HTTP/HTTPS)
  • C# 面向对象基础,简单的银行存钱取钱程序
  • 精密矫平机如何推动工业自动化?
  • 素数判断-C语言
  • 硬刚小米15,又一小屏旗舰加入战场了
  • 深入理解同步和异步与reactor和proactor模式
  • MySQL | group by 用法