元注解的作用是解释注解其他注解,java定义了4个标准的metaannotation类型,它们被用作对其他的annotation类型说明。元注解分类如下:
- @Target:用于描述注解的使用范围
- @Retention:表示需要在什么级别保存注解信息,用于描述注解的声明周期,其中SOURCE<CLASS<RUNTIME
- @Document:说明该注解将包含在javadoc中
- @Inherited:说明子类可以继承父类中的该注解
自定义注解,使用元注解修饰,【AnnotationTest.java】
package day15; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @interface AnnotationTest { } class Test01 { //注解可以显示赋值,如果没有默认值就必须给注解赋值 @AnnotationTest1(name = "huahua", sclass = {}) public void Test01() { } //如果注解只有一个参数,且为value时可以省略参数名,其他参数名不可以省略 @AnnotationTest2("") public void test02() { //一个类中方法不能有多个public修饰 } } @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface AnnotationTest1 { //注解的参数,类型+参数名()[default 默认值] String name() default ""; int age() default 0; int id() default -1; String[] sclass(); } /*注解的使用范围有:TYPE、FIELD、METHOD、PARAMETER、CONSTRUCTOR、LOCAL_VARIABLE、 ANNOTATION_TYPE、PACKAGE、TYPE_PARAMETER、TYPE_USE */ @Target({ElementType.METHOD, ElementType.TYPE}) //注解的声明周期有:SOURCE、CLASS、RUNTIME @Retention(RetentionPolicy.RUNTIME) @interface AnnotationTest2 { //注解的参数,类型+参数名()[default 默认值] String[] value(); }