本文共 2257 字,大约阅读时间需要 7 分钟。
基本注解
java提供了五个基本注解
- @Override :指定方法负载的,它可以轻质一个子类必须覆盖父类中的方法,保证父类要包含一个被该方法重写的方法,否则就会编译出错。(只能修饰方法,不能修饰元素)
- @Deprecated :用于表示某个程序元素(如方法、类)已经过时,如果使用编译器会给出警告
- @SuppressWarning:被该注释注释的程序元素取消显示指定的编译警告,且该注释一直作用于该程序元素的所有子元素。 例如:关闭整个类里的编译器警告 @SuppressWarning(value=“unchrcked”)
- @SafeVarargs:修饰引发“堆污染”的方法和构造器,专门为抑制堆污染提供
- @FunctionalInterface:指定某个接口必须是函数式接口(接口只有一个抽象方法),只能修饰接口。
元注解
- @Retention:只能用于修饰注解,指定被修饰的注解可以保留多长时间(value)。 1.RententionPolicy.CLASS:编译器将注解记录在class文件里,运行时,jvm取不到注解信息。这是默认值。 2.RententionPolicy.RUNTIME:编译器将注解记录在class文件中。当程序运行时,jvm也可以获取到注解信息,程序通过反射来获取该注解信息 3.RententionPolicy.SOURCE: 注解只保留在源代码中,编译器直接丢弃这种注解。
- @Target :用于指定被修饰的注解能修饰那些程序单元(ElementType [] value) 1.ElementType.ANNOTATION_TYPE:指定该注解只能修饰注解 2.ElementType.CONSTRUCTOR: 指定该注解只能修饰构造器 3.ElementType.FIELD: 该注解只能修饰成员变量 4.ElementType.LOCAL_VARIABLE:该注解只能修饰局部变量 5.ElementType.METHOD: 该注解只能修饰方法 6.ElementType.PACKAGE: 该注解只能修饰包 7.ElementType.PARAMETER:该注解只能修饰参数 8.ElementType.TYPE: 该注解可以修饰类、接口或枚举定义
- @Documented: 被该注解修饰的类将被javadoc工具提取成文档。如果定义注解时使用了@Documented修饰,那么该注解修饰的程序元素的API文档中会包含该注解说明。
- @Inherited:被它修饰的注解将具有继承性,如果某个类使用了@Xxx注解,则其子类自动的也被@Xxx修饰 注:查看某个类是否具有某个注解的API :类名.class.isAnnotationPresent(注解名.class)
自定义注解
- 定义注解使用 @interface关键字
- 成员变量在注解中以无形参的方法形式来声明,其方法名和返回值定义了该成员变量的名字和类型。
- 可以使用default指定成员变量的初始值。
public @interface Student{ String name(); int age() default 18; }
注解分类
1. 标记注解:没有成员变量的注解。这种仅利用自身的存在与否来提供信息,如@Override2. 元数据注解: 包含成员变量的注解。因为他们可以接收更多的元数据,因此也被称为元数据注解。
提取注解信息
1.使用了注解修饰类、方法等成员后,这些注解并不会自己生效,必须由开发者提供工具来处理注解信息。
2.java.labg.annotation.Annotation接口时所有注解的父接口。AnnotatedElement接口是程序中所有可以接收注解的程序元素。有一下几个实现类。
1.Class:类定义
2.Constructor:构造器定义
3.Field: 类的成员变量定义
4.Method: 类的方法定义
5.Package:类的包定义
通过反射获取了某个类的AnnotatedElement对象(如 Class Method Field 等),程序就可以调用该对象的如下几个方法来访问注解信息。
1. get Annotation(Class annotationClass);返回元素上存在的指定类型的注解,无则返回null
2. getDeclaredAnnotation(Class annotationClass) 返回指定类型的直接修饰该元素的注解 不存在返回null
3. getAnnotations() 返回该程序元素上的所有注解
4. getDeclaredAnnotations():返回直接修饰该程序元素上的所有注解
5. boolean isAnnotationPresent(Class annotationClass) 判断该程序元素上是否存在指定类型的注解
6. 等等…
直接使用注解来标记程序不会对程序有任何影响 这也是java注解的重要原则一条 APT
1. APT(Annotation Processing Tool)是一种注解处理工具,它找出源代码中的注解 进行额外信息的处理。2. java提供的javac.exe工具中有一个-processor选项,该选项可指定一个注解处理器,如果在编译java源文件时通过该选项指定了注解处理器,那么这个注解处理去将会在编译时提取并处理java源文件中的注解。
转载地址:http://denhb.baihongyu.com/