注解

 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 }

 

posted @ 2021-12-07 19:05  橘猫的夏天  阅读(32)  评论(0编辑  收藏  举报