Java 注解(Annotation)

发布时间:2026/7/11 20:04:06

Java 注解(Annotation) 1. 什么是注解注解Annotation也叫注释类型是一种引用数据类型。它和类、接口一样编译后也会生成.class文件。注解本身不直接改变程序逻辑但它可以携带元数据在编译、类加载、运行时被读取并配合工具或框架完成特定功能。2. 自定义注解的语法自定义注解使用interface关键字基本语法如下[修饰符列表]interface注解类型名{// 属性定义}使用注解的语法格式注解类型名注解可以出现的位置类上上一行属性上方法上变量上甚至可以用在注解上3. JDK 内置注解java.lang包下提供了几个常用的内置注解3.1 DeprecatedDeprecated用于标记不推荐使用的程序元素。通常是因为该元素存在危险或者已有更好的替代方案。3.2 OverrideOverride表示一个方法声明意图重写父类中的方法。核心要点只能注解方法仅供编译器参考与运行时无关编译器会检查被标注的方法是否确实是重写父类方法不是则报错3.3 SuppressWarningsSuppressWarnings用于指示编译器取消显示指定的警告信息。4. 元注解元注解是专门用来标注其他注解的注解。4.1 TargetTarget指定被标注的注解可以出现在哪些程序元素上。例如Target(ElementType.METHOD)表示被该注解标注的自定义注解只能出现在方法上。4.2 RetentionRetention指定被标注的注解最终保留到哪个阶段。取值如下取值含义RetentionPolicy.SOURCE仅保留在 Java 源文件中RetentionPolicy.CLASS保留在 class 文件中但 JVM 不加载RetentionPolicy.RUNTIME保留在 class 文件中且能被反射机制读取Retention的源码publicinterfaceRetention{RetentionPolicyvalue();}publicenumRetentionPolicy{SOURCE,CLASS,RUNTIME}Target的源码publicinterfaceTarget{ElementType[]value;// ElementType 是一个枚举}5. 注解中定义属性在注解中可以定义属性语法与方法类似publicinterfaceMyAnnotation{Stringname();// 属性 nameString[]color();// 属性 color数组类型intage()default18;// 属性 age指定默认值后使用时可以不赋值int[]no;// 属性 no数组类型}使用规则如果注解中有属性使用时必须给属性赋值已指定默认值的除外数组属性只有一个元素时可以省略花括号{}publicclassTest{MyAnnotation(namezhangsan,color{blue,red},no1)publicvoiddoSomething(){// age 有默认值可写可不写}}5.1 属性名为 value 的特殊规则如果属性名为value且只有这一个属性时使用注解可以省略属性名publicinterfaceMyAnnotation01{Stringvalue();}publicclassTest01{MyAnnotation01(haha)publicvoiddoSomething(){}}如果有多个属性则value也必须显式写出属性名。5.2 属性支持的类型注解属性可以是以下类型及其数组形式基本数据类型int、double、boolean 等StringClass枚举以上类型的数组6. 通过反射获取注解注解可以通过反射机制在运行时读取前提是Retention必须设置为RUNTIME。// 获取类的 Class 对象ClasscClass.forName(完整类名);// 判断该类上是否存在指定注解System.out.println(c.isAnnotationPresent(注解类型名.class));if(c.isAnnotationPresent(注解类型名.class)){// 获取注解对象注解类名 对象名(注解类型名)c.getAnnotation(注解类型名.class);// 读取注解属性值就像调用接口方法一样对象名.属性名();}通过反射与注解的配合可以在运行时动态获取类、方法、字段上的元数据这是 Spring、JUnit 等框架的核心机制之一。

相关新闻