单元测试 @Testeclipse自带jar包 Ctrl+1导入使用 注解 JDK提供的注解 @Deprecated表示被修饰的方法已经过时 @Override重写方法 1.5支持父类不支持接口 1.5之后支持接口 @SuppressWarnings抑制警告 需要给属性值 all 所有警告都抑制 自定义注解 关键字@interface 成员 publicabstract 返回值类型属性名()[defualt 属性值]; 返回值类型 基本类型,字符串,Class,注解,枚举,一维数组 public @interface Annotation { public abstract intage(); public abstract String name(); } 注意:需要加上元注解才可以使用(不需要背单词能够使用快捷键写出即可) @Retention 用于确定被修饰的自定义注解生命周期 RetentionPolicy.SOURCE 被修饰的注解只能存在源码中,字节码class没有。用途:提供给编译器使用。 RetentionPolicy.CLASS被修饰的注解只能存在源码和字节码中,运行时内存中没有。用途:JVM java虚拟机使用 RetentionPolicy.RUNTIME被修饰的注解存在源码、字节码、内存(运行时)。用途:取代xml配置 @Target 用于确定被修饰的自定义注解使用位置 ElementType.TYPE修饰类、接口 ElementType.CONSTRUCTOR 修饰构造 ElementType.METHOD修饰方法 ElementType.FIELD修饰字段 //自定义注解要做元注解声明 Retention 生命周期 Target注解作用的位置 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE,ElementType.METHOD}) public @interface Annotation02 { public abstract int age(); //default 10; public abstract String name(); //default "Lily"; public abstract Annotation AnnotationDemo() default @Annotation(age=19,name="hellp"); public abstract String[] names() default {"JIm","Tom"}; } 注解使用 使用格式 @注解类名( 属性名= 值 , 属性名 = 值 , .....) 应用在类,方法,构造方法 字段上 注意 如果属性名为value,且当前只有一个属性,value可以省略。 如果属性类型为数组,设置内容格式为:{ 1,2,3 } 一个对象上,注解只能使用一次,不能重复使用。 解析 java.lang.reflect.AnnotatedElement booleanisAnnotationPresent(Class annotationClass) 当前对象是否有注解 传入判断注解的字节码文件对象 TgetAnnotation(Class<T> annotationClass) 获得当前对象上指定的注解 传入获取注解的字节码文件对象 返回要获取的注解类型 public classAnnotationTest { @Annotation02(age = 30,name = "hello") public void method(){ System.out.println("此方法被Annotaion02注解"); } @Test public void method2(){ Classc = AnnotationTest.class; Method[]methods = c.getMethods(); for(Method method : methods){ boolean b = method.isAnnotationPresent(Annotation02.class); // System.out.println(method.getName()); if(b){ System.out.println(method.getName()); // 获取方法上注解的实例 Annotation02 anno = (Annotation02) method.getAnnotation(Annotation02.class); // 输出注解中携带的信息 System.out.println(anno.name()); } }
|