Java基础 -- 注解Annotation

注解的概念:

可以简单的将注解理解为标签(标签里面的内容就是注解内的元素),想钉在哪就钉在哪,比如:钉在类型上(类/接口/枚举),钉在类的数据成员上,钉在类的方法成员上,钉在方法的入参上,甚至钉在别的注解上等等。

官方下的注解含义为:注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非代码本身的一部分。注解对于代码的运行效果没有直接影响。 

 注解有许多用处,主要如下:
- 提供信息给编译器: 编译器可以利用注解来探测错误和警告信息
- 编译阶段时的处理:  软件/工具/框架可以读取注解信息来生成代码/Html文档或者其它处理
- 运行时的处理:  注解信息可以在程序运行的时候被提取出来加以利用

注解 @interface MyAnnotation{ }

注解的定义:

注解的定义
注解的定义是由 @interface 定义的一种类类型,是个语法糖。注解的超类都是java.lang.Annotation
注解定义的语法 注解定义的含义
@interface MyAnno1{ } 无内容的注解
@interface MyAnno2{ int value(); } 拥有单值元素的注解

@interface MyAnno3{

          int value(); 

          String name();

}

拥有多个元素的注解

@interface MyAnno4{

          int value() default 10 ;

          String name() default "anno" ;

扫描二维码关注公众号,回复: 4631026 查看本文章

}

拥有多个元素的注解,

某些元素可以携带默认值

@Retention(RetentionPolicy.RUNTIME)

@interface MyAnno5{ }

可以对自定义注解进行元注,

元注解是Java预留的,用来管控自定义注解的生态

元注解:我就简单说它是元注,它是用来管控自定义注解的生态的。元注是java预留的,一共有5种。@Retention @Target @Documented @Inherited @Repeatable

元注解@Retention
元注解@Retention 管控自定义注解的保留期(/生命)
元注解 元注解内的元素

元注解内的元素的作用,

自定义注解的生命

@Retention RetentionPolicy.SOURCE

代码阶段,

作用:代码维护人员看看而已

RetentionPolicy.CLASS

编译阶段,

作用:给其它工具/框架来使用

RetentionPolicy.RUNTIME

运行阶段,

作用:代码运行时可以提取自定义注解内容来消费

元注解@Target

元注解@Target 管控自定义注解可以钉在哪里

( 默认:无@Target元注的自定义注解可以钉在任何地方 )

元注解 元注解内的元素

元注解内的元素的作用,

自定义注解可以钉在哪里

@Target ElementType.TYPE

钉在类型(类/接口/枚举)上

ElementType.FIELD 钉在类的数据成员上
ElementType.METHOD 钉在类的方法成员上
ElementType.PARAMETER 钉在方法的入参上
ElementType.LOCAL_VARIABLE 钉在方法的局部变量上
ElementType.CONSTRUCTOR 钉在类的构造函数上
ElementType.ANNOTATION_TYPE 钉在别的注解上
ElementType.PACKAGE 钉在包上
元注解@Inherited
元注解@Inherited 管控自定义注解可以被子类继承
元注解@Documented
元注解@Documented 管控自定义注解种的内容可以用来制作JavaDoc文档
元注解@Repeatable
元注解@Repeatable 是jdk8才引入的,以上的四个元注解中的内容元素都是单值类型的,而@Repeatable中的元素是数组类型的,并且该元素必须是个注解

@interface Persons { //定义:容器
    Person[]  value();   //容器内的元素是数组,数组内的每个元素必须是注解
}

@Repeatable(Persons.class)  //元注:Persons容器
@interface Person{                //定义:Persons注解容器内的元素是个注解
    String role default "";
}

@Person(role="artist") //代码中声明注解
@Person(role="coder")
@Person(role="pm")
public class SuperMan{
    //这里可以通过反射获取注解内容加以消费
}


注解的用法:


注解的运用场景:


注解的小示例:

猜你喜欢

转载自blog.csdn.net/mmlz00/article/details/85231608