笑明子 注解

Annotation介绍:
可以理解为:1:在代码中的特殊标记,这些标记不会影响程序的正常运行,但是可以在程序的编译、类加载、运行时读取。
例如:当一个注解被定义为运行时可见时,当class被装载时注解才会被虚拟机读取。
2:注解可以通过使用注解可以:在不改变原有程序的情况下对程序进行补充。
3:Annotation可以使用在包、类、构造器、方法、成员变量、局部变量、参数的声明中。
4:在程序中可以通过反射获取到特定成员的注解。然后根据情况给出处理代码。
APT:
(是一类型工具的统称)可以在程序的运行期间对Annotation访问、解析。重而使Annotation可以作用在程序的运行期间。
java基本的Annotation:
@Override 表示此成员是复写而来,如果不是复写来的就报红
@Deprecated 不赞成使用的成员
@SuppressWarnings 抑制编译警告
自定义的Annotation:
语法:(@interface)(实际就是继承了Annotation接口)
public @interface MyAnnotation{} //定义无参数的注解
public @interface MyAnnotation{ //定义有参数的注解
String name();
int age();
}
public @interface MyAnnotation{ //定义有默认参数的注解
String name() default "xuming";
int age() default 26;
}
使用语法:
@MyAnnotation //使用无参注解
public void Xxx(){}
@MyAnnotation(name="xuming",age=27) //使用含参注解(如果有默认值,不指定时自动使用默认值)
public void Xxx(){}
根据是否有成员变量分类:
1:标记Annotation
没有成员变量,只通过是否有改注解来提供信息。(@Override)
2:元数据Annotation
提供参数就是提供元数据,所有叫做元数据Annotation
Annotation获取:
1:Annotation接口是所有注解的父接口
2:java.lang.reflect包中定义了可以被注解修饰的成员:
Class 类
Constructor 构造器
Field 类的成员变量
Method 类方法
Package 包
3:AnnotatedElement接口
程序元素的父接口:程序元素(类、构造方法、方法、成员变量等等等)
只要获取到程序元素就可以使用AnnotatedElement接口中的三个方法:
//返回程序元素上的指定类型的注解,如果没有返回null
1:getAnnotation(Class<T> annotationClass)
//返回该程序元素上的所有注解
2:Annotation [] getAnnotations()
//判断程序元素上是否有指定类型的注解,有返回true,没有返回false;
3:boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
使用Annotation:
结合放射使用注解:
反射 -> 程序元素 -> 注解 ->判断注解或者获取注解中的元数据(获取到注解后强制转换为特定类型)
JDK的元Annotation:
java提供了只可以修饰Annotation的的注解:
1:Retention(翻译:保留)
用于指定被修饰的Annotation保留多长时间。(编译时丢弃,运行之前丢弃,运行时可用(可以通过反射获取到))
@Retention()可以接受三个参数分别是:
1:@Retention(RetentionPolicy.SOURCE) //编译器直接丢弃
2: @Retention(RetentionPolicy.CLASS) //保存在Class文件中,运行时丢弃 (默认值)
3: @Retention(RetentionPolicy.RUNTIME) //保存在Class文件中,运行时可以使用反射获取到。
使用:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation{}
2:@Target (翻译:目标)
用于指定被修饰的Annotation可以使用在那种程序元素中,例如:某个注解只能用于构造方法。
使用@Target时需要指顶目标类型(有如下类型):
1:ElementType.ANNOTATION_TYPE //只能修饰Annotation
2:ElementType.CONSTRUCTOR //只能修饰构造方法
3: ElementType.FIELD //只能修饰成员变量
4:ElementType.LOCAL_VARIABLE //只能修饰局部变量
5:ElementType.METHOD //只能修饰方法
6:ElementType.PACKAGE //只能修饰包
7:ElementType.PARAMETER //只能修饰参数
8: ElementType.TYPE //可以修饰类、接口(注解)、枚举
使用:
//MyAnnotation注解只能修饰方法
@Target(ElementType.METHOD)
public @interface MyAnnotation{}
3:@Documented
被@Document修饰的注解使用后会被javaDoc的提取
4:@Inherited
被@Inherited修饰的注解可以被继承。
使用APT处理Annotation:
什么是APT:
APT是一种处理注解的工具,可以再源代码文件中找出Annotation,然后针对性的做出处理。
例如:我们可以自定义一个APT,作用是对每一个java文件生成对应的xml文件。

posted on 2018-01-18 13:37  笑明子  阅读(110)  评论(0编辑  收藏  举报

导航