注解应用
1. 注解说明
注解(Annotation)又叫标注,是从 Java5 开始增加的一种引用数据类型
注解的本质就是标记代码,标记后的代码可以执行指定的特殊处理
自定义注解自动继承 java.lang.annotation.Annotation 接口
注解体中只有成员变量没有成员方法,而注解的成员变量以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型
如果注解只有一个参数成员,建议使用参数名为 value,而类型只能是八种数据类型、String 类型、Class 类型、enum 类型以及 Annotation 类型
2. 元注解
元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其他的注解上面
@Retention
设置注解的生命周期
RetentionPolicy.CLASS
:注解只在源码阶段保留,在编译时将被丢弃RetentionPolicy.SOURCE
:注解只会保留到程序运行的时候,不会加载到JVM中(默认)RetentionPolicy.RUNTIME
:注解可以保留到程序运行的时候,会被加载到JVM
@Target
指定被修饰的注解能用于那些元素的修饰
ElementType.ANNOTATION_TYPE
:可以给一个注解进行注解ElementType.CONSTRUCTOR
:可以给构造方法进行注解ElementType.FIELD
:可以给属性进行注解ElementType.LOCAL_VARIABLE
:可以给局部变量进行注解ElementType.METHOD
:可以给方法进行注解ElementType.PACKAGE
:可以给一个包进行注解ElementType.PARAMETER
:可以给一个方法内的参数进行注解ElementType.TYPE
:可以给类进行注解ElementType.TYPE_PARAMETER
:表示该注解能写在类型变量的声明语句中,如泛型Java8开始ElementType.TYPE_USE
:Java8开始表示该注解能写在使用类型的任何语句中
@Inherited
并不是说注解本身可以继承,而是说如果一个超类被该注解标记过的注解进行注解时,如果子类没有被任何注解应用时,则子类就继承超类的注解
@Documented
类和方法的Annotation在缺省情况下是不出现在javadoc中的,所以使用 @Documented 可以生成注解的文档
@Repeatable
表示自然可重复的含义,从Java8开始增加新特性
3. 常用注解
注解 | 说明 |
---|---|
@Override | 限定重写父类方法,该注解只能用于方法 |
@Deprecated | 用于表示所修饰的元素(类,方法等)已过时 |
@SuppressWarnings | 抑制编译器警告 |
4. 自定义注解
- 创建自定义注解
说明:@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Name {
public String value() default "默认值";
}
- @Target(ElementType.TYPE) 该注解只能注解在类上
- @Retention(RetentionPolicy.RUNTIME) 注解会被加载到JVM中
- 创建一个类使用该注解 ```java @Name(“student”) public class Person{
}
3. 通过反射获取类上的注解
```java
Name annotation = Person.class.getAnnotation(Name.class);
System.out.println(annotation.value());