这个接口的主要做用就是找出类上标注的注解和注解的名称。html
此接口在1.6中有四个方法,(1.8中又添加了几个方法,都差很少)java
<T extends Annotation> T getAnnotation(Class<T> annotationClass) app
若是存在该元素的指定类型的注释,则返回这些注释,不然返回 null。 测试
Annotation[] getAnnotations() spa
返回此元素上存在的全部注释。 code
Annotation[] getDeclaredAnnotations() htm
返回直接存在于此元素上的全部注释。 blog
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 继承
若是指定类型的注释存在于此元素上,则返回 true,不然返回 false。 接口
如下经过示例解释
先定义自定义注解,若是对自定义注解不了解请点击深刻理解Java:注解(Annotation)自定义注解入门
写main方法测试
Controller注解类
package com.hldh.test; import java.lang.annotation.*; /** * Created by liuhj on 2015/11/16. */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface Controller { String value() default "index"; }
而后写测试类MainTest.java
package com.hldh.test; import java.lang.annotation.Annotation; /** * Created by liuhj on 2015/11/16. * 测试查找自定义注解 */ public class MainTest { public static void main(String args[]){ try{ //加载一个包含注解的类 Class<?> clazz = Class.forName("com.hldh.test.IndexController"); //判断是否有某类型的注解,若是有,返回注解,没有返回空 Controller controller = clazz.getAnnotation(Controller.class); System.out.println(controller); //@com.hldh.test.Controller(value=index) System.out.println(controller.value()); //返回controller注解的默认值 index //返回此元素上存在的全部注释。 Annotation[] a = clazz.getAnnotations(); for(Annotation annotation :a){ System.out.println(annotation); //@com.hldh.test.Controller(value=index ) @com.hldh.test.RequestMapping(value=name) } //是否有指定类型的注解存在于类上 System.out.println(clazz.isAnnotationPresent(Controller.class)); //true 包含controller注解 //得到直接做用于此类的注解,继承的注解得不到 Annotation[] a1 = clazz.getDeclaredAnnotations(); for(Annotation annotation :a1){ System.out.println(annotation); //@com.hldh.test.Controller(value=index ) @com.hldh.test.RequestMapping(value=name) } }catch (Exception e){ e.printStackTrace(); } } }
第四个方法获取直接做用于此类的注解,这里面涉及了注解的继承,参考子类能够继承到父类上的注解吗--有结论了。