注解
Java常用的三个内置注解:
-
@Override : 定义在Java.lang.Override中,表示覆盖父类方法;
-
@Deprecated : 定义在Java.lang.Deprecated中,表示不建议使用的;
-
@SuppressWarning : 定义在Java.lang.SuppressWarning中,抑制警告信息;
元注解:
- 元注解的作用就是负责注解其它注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其它annotation类型作说明。
- 可以在Java.lang.annotation包中可以找到4个元注解,它们分别是(@Target,@Retention,@Documented,@Inherited)
- @Target : 用于描述注解的使用范围(即:被描述的注解可以用在什么地方);
- @Retention : 表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE>CLASS>RUNTIME);
- @Documented : 说明该注解将被包含在JavaDoc中;
- @Inherited : 说明子类可以继承父类中的该注解;
自定义注解:
-
使用@interface自定义注解时,自动继承了Java.lang.annotation.Annotation接口;
-
定义注解的格式:
-
public @interface 注解名 {定义的内容}
@Target(ElementType.METHOD) // 注解的使用范围,多个用逗号隔开 @Retention(RetentionPolicy.RUNTIME) // 注解的生命周期 SOURCE>CLASS>RUNTIME public @interface MyAnnotation{}
-
-
注解中参数只有一个的话,参数名一般使用value
@Target({ElementType.METHOD,ElementType.FIELD}) // 注解的使用范围,多个用逗号隔开 @Retention(RetentionPolicy.RUNTIME) // 注解的生命周期 SOURCE>CLASS>RUNTIME @interface MyAnnotation{ String value(); }
-
默认值的问题
-
没有定义默认值:
public class Test06 { @MyAnnotation(name = "张三",sex = 0) public void test01(){} } @Target({ElementType.METHOD,ElementType.FIELD}) // 注解的使用范围,多个用逗号隔开 @Retention(RetentionPolicy.RUNTIME) // 注解的生命周期 SOURCE>CLASS>RUNTIME @interface MyAnnotation{ int name(); String sex(); // 使用注解时括号内必须有值,如果不想写,我们可以在定义注解时定义一个默认值; }
-
定义了默认值:
public class Test06 { @MyAnnotation public void test01(){} } @Target({ElementType.METHOD,ElementType.FIELD}) // 注解的使用范围,多个用逗号隔开 @Retention(RetentionPolicy.RUNTIME) // 注解的生命周期 SOURCE>CLASS>RUNTIME @interface MyAnnotation{ int name() default 0; String sex() default ""; // 使用注解时括号内必须有值,如果不想写,我们可以在定义注解时定义一个默认值; }
-
我们如何读取注解呢?我们可以通过反射机制!