注解
1 package com.atfu.java1; 2 3 import java.util.ArrayList; 4 5 /** 6 * 注解的使用 7 * 1.理解Annotation 8 * ① jdk5.0新增的功能 9 * ② Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。 10 * ③ Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被 11 * 保存在Annotation的 "name = value"对中。 12 * 2.Annotation的使用实例 13 * @Override: 限定重写父类方法,该注解只能用于方法 14 * @deprecated: 用于 表示所修饰的元素(类、方法等)已过时。 15 * @suppersswarnings: 抑制编译器警告 16 * 17 * 3.如何自定义注解:参照@suppersswarnings定义 18 * ① 注解用 @interface 来声明 19 * ② 内部定义成员,通常使用value表示 20 * ③ 可以指定成员的默认值,使用default来定义:String[] value() default "hello"; 21 * ④ 如果自定义的注解没有成员,表示是一个标识作用 22 * ⑤ 如果注解有成员,在使用注解时,需要指明成员的值 23 * ⑥ 自定义注解必须配上注解的信息处理流程(使用反射)才有意义 24 * ⑦ 自定义注解通常都会指明两个元注解:Retention、Target 25 * ⑧ Annotation的成员变量在Annotation定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。我们称为 26 * 配置参数。类型只能是八种基本数据类型、String类型、Class类型、Annotation类型、以上所有类型的数组。 27 * 28 *4.jdk提供的四种元注解 29 * 元注解就是用来修饰其他注解的注解 30 * Retention:指定所修饰的Annotation的生命周期:SOURCE/CLASS(默认行为)/RUNTIME 31 * 只有声明为RUNTIME生命周期的注解才能通过反射获取。 32 * Target:用于指定被修饰的Annotation能用于修饰哪些程序元素 33 * *********出现的频率较低********** 34 * Documented:表示所修饰的注解在被javadoc解析时,保留下来。默认情况下,javadoc是不包括注解的 35 * >>定义为Documented的注解必须设置Retention值为RUNTIME。 36 * Inherited:被它修饰的Annotation将具有继承性。如果某个类使用了被 @Inherited 修饰的Annotation,则其子类将自动具有该注解 37 * 38 * 5.jdk8 中注解的新特性:可重复注解、类型注解 39 * 5.1可重复注解 ① 在MyAnnotation上声明 @Repeatable,成员值为 MyAnnotation.class 40 * ②MyAnnotation的Target和Repeatable等元注解需要和MyAnnotations相同 41 * 5.2类型注解: 42 * ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)。 43 * ElementTYPE_USE 表示该注解能写在使用类型的任何语句中。 44 * @author fu jingchao 45 * @creat 2021/12/6-16:18 46 */ 47 @MyAnnotation(value = "hello") 48 public class AnnotationTest { 49 } 50 51 class Generic<@MyAnnotation T>{ 52 public void show() throws @MyAnnotation RuntimeException{ 53 ArrayList<@MyAnnotation String> list = new ArrayList<>(); 54 55 int num = (@MyAnnotation int)10L; 56 } 57 58 }
1 package com.atfu.java1; 2 3 import java.lang.annotation.*; 4 import static java.lang.annotation.ElementType.*; 5 6 /** 7 * @author fu jingchao 8 * @creat 2021/12/6-16:55 9 */ 10 @Inherited 11 @Retention(RetentionPolicy.RUNTIME) 12 @Target({TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE, TYPE_PARAMETER,TYPE_USE}) 13 public @interface MyAnnotation { 14 String value() default "what?"; 15 }
此为本人学习笔记,若有错误,请不吝赐教