【Java基础知识】Java 注解

news/2024/7/8 8:48:51

 

 

一、基础普及

     Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。

     Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。

(1)内置注解

     Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。

    作用在代码的注解是

  • @Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
  • @Deprecated - 标记过时方法。如果使用该方法,会报编译警告。
  • @SuppressWarnings - 指示编译器去忽略注解中声明的警告。

 (2)元注解

  • @Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。
  • @Documented - 标记这些注解是否包含在用户文档(javadoc)中。
  • @Target - 标记这个注解应该是哪种 Java 成员(类、接口(Type),方法、包)。
  • @Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)

从 Java 7 开始,额外添加了 3 个注解:

  • @SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
  • @FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。
  • @Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

二、注解架构

               

   综上:  

  1. 1 个 Annotation 和 1 个 RetentionPolicy 关联。
  2. 1 个 Annotation 和 1~n 个 ElementType 关联。
  3. Annotation 有许多实现类,包括:Deprecated, Documented, Inherited, Override 等等。

  (1)注解组成:

      Annotation

      

  Retention

      

ElementType

     

解释说明:

一、Target  ElementType

TYPE,               /* 类、接口(包括注释类型)或枚举声明  */
FIELD,              /* 字段声明(包括枚举常量)  */
METHOD,             /* 方法声明  */
PARAMETER,          /* 参数声明  */
CONSTRUCTOR,        /* 构造方法声明  */
LOCAL_VARIABLE,     /* 局部变量声明  */
ANNOTATION_TYPE,    /* 注释类型声明  */
PACKAGE             /* 包声明  */

二、Retention  RetentionPolicy

SOURCE,            /* Annotation信息仅存在于编译器处理期间,源文件中有效 */
CLASS,             /* 编译器将Annotation存储于类对应的.class文件中。默认行为  */
RUNTIME            /* 编译器将Annotation存储于class文件中,并且可由JVM读入 */

三、实践应用

  1. 自定义注解设置默认值,并通过反射获取默认值
  2. 应用场景:比如AOP切面通过自定义注解,进行指定切入方法 通知
@Slf4j
public class Cast01_Annotation {

    @MyAnnotation1(age = 12,name = "刘备")
    public void test01(){

    }

    @MyAnnotation2(18)
    public void test02(){

    }

    public static void main(String[] args) {
        Cast01_Annotation cast01 = new Cast01_Annotation();
        cast01.test01();
        cast01.test02();

        //通过反射获取注解中的值
        Method[] methods = Cast01_Annotation.class.getMethods();
        List<Method> methods1 = Arrays.asList(methods);
        methods1.forEach(method->{
            if (method.isAnnotationPresent(MyAnnotation1.class)){
                MyAnnotation1 annotation = method.getAnnotation(MyAnnotation1.class);
                log.info("编号:{},年龄:{},姓名:{},学校:{}",
                annotation.id(),annotation.age(),annotation.name(),annotation.schools());
            }
        });
    }
}


// 自定义注解1
@Target({ElementType.TYPE,ElementType.METHOD}) //作用域
@Retention(RetentionPolicy.RUNTIME) //作用范围
@interface MyAnnotation1{
    //注解的参数: 参数类型 + 参数名();
    String name() default "";
    int age()  ;
    int id() default -1;
    String[] schools() default {"北京理工大学","北京大学"};
}

// 自定义注解2
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2{
    int value();
}

  参考地址:https://www.runoob.com/w3cnote/java-annotation.html

 


http://www.niftyadmin.cn/n/4407314.html

相关文章

大鹏半岛海边团建烧烤野炊上岛赶海一日游全攻略

炎炎夏日与海边最为搭配了&#xff0c;深圳海边团建怎么安排&#xff0c;小编给大家整理了一份海边团建攻略&#xff0c;喜欢的可以收藏起来哦 较场尾海边烧烤上岛赶海一日游 东冲真人CS野战趣味游戏烧烤/野炊沙滩嘻戏一日游 大澳湾海上皮划艇真人CS野战趣味游戏野炊一日游 …

大航海时代online如何练突击和外科~~

练突击的人去点NPC&#xff0c; 练外科的人去加NPC的援军,帮NPC补人&#xff0c; 技能超级快哦

代码随想录打卡

这里写目录标题 1.数组部分1.1二分查找1.2移除元素1.3 有序数组的平方1.4长度最小的子数组1.5螺旋矩阵II 2. 链表部分2.1移除链表元素2.2设计链表2.3反转链表2.4两两交换相邻的节点2.5删除链表的倒数第n个节点 1.数组部分 1.1二分查找 class Solution {public int search(int[…

深圳免费旅游景点大全|深圳旅游攻略(上)

大鹏所城 ☑ 门票&#xff1a;免费 ☑ 开放时间&#xff1a;09:00~17:30 ☑ 地址&#xff1a;深圳市龙岗区南门西路 ☑ 乘车路线&#xff1a;在大鹏王母站乘坐M741(原B756路)公交车到大鹏所城站下车 推荐理由&#xff1a;大鹏所城是深圳八景之首&#xff0c;中国历史文化名村、…

【PPT】高质量免费 PPT模板

一、PPT的制作 高质量的免费PPT资源

关于掠夺7甲能抢到几件,在什么地方抢呢? (转老公婆)

关于掠夺7甲能抢到几件,在什么地方抢呢? A3&#xff1a;掠夺7甲就是指7件通过收掠获得的甲&#xff0c;而长相一样的掠夺铠甲一共有9件&#xff0c;其中2件瘦子甲是靠空挖获得的。掠夺7甲的出处如下&#xff0c;不过具体的编制和刷新规律需要自己探索一下&#xff0c;这里不详…

深圳免费旅游景点大全|深圳旅游攻略(下)

蛇口海洋博物馆* ☑ 门票&#xff1a;免费 ☑ 开放时间&#xff1a;星期二至星期日上午9:3012:30&#xff0c;下午14:3018:30 ☑ 地址&#xff1a;蛇口街道办蛇口渔街上&#xff0c;石云路与南水路交会处 ☑ 乘车路线&#xff1a;地铁2号线东角头站D出口沿蛇口新街步行5分钟至新…

回答一些朋友的收掠问题(二)(转自:老公婆)

回答一些朋友的问题&#xff08;二&#xff09; Q1&#xff1a;如何防止稀有NPC被系统刷掉&#xff1f; A1&#xff1a;防止被刷掉的方法是要时刻保持海域人数&#xff08;至少达到5人&#xff09;&#xff0c;被刷新掉的原因很简单&#xff1a;假设海域5人时候可以同时刷新5个…