第二部分 注解
- 对应学习视频:【狂神说Java】注解和反射
第1章 什么是注解
-
引入:JDK5.0开始。
-
作用:对程序做出解释,可以被其它程序(编译器)读取。
-
格式:@注释名,也可以添加参数值,如:
@SuppressWarnings(value="unchecked")
-
使用位置:package, class, method, field…,可以通过反射访问到此元数据。
第2章 内置注解
- @Override: 重写另一个超类中的方法声明;
- @Deprecated: 不推荐程序员使用,但可以使用,或存在更好方式;
- @SuppressWarnings: 镇压警告,有参数。
第3章 元注解
-
作用:负责注解其它注解,4个meta-annotation。
-
@Target:注解的适用范围;
@Target(value = {ElementType.METHOD, ElementType.TYPE})
-
@Retention:注解的生命周期(有效的位置)(SOURCE < CLASS < RUNTIME);
@Retention(value = RetentionPolicy.RUNTIME)
-
@Document:该注解生成在Javadoc中;
-
@Inherited:子类可以继承父类的注解。
第4章 自定义注解
-
使用@interface自定义注解,自动继承java.lang.annotation.Annotation接口;
-
每一个方法实际上是声明了一个配置参数,该方法的名称为参数名;
-
返回值类型即为参数类型(基本数据类型、Class、String、enum);
-
可使用default声明参数的默认值;
-
只有一个参数时,参数名为value;
-
注解元素必须有值,经常使用空串或0作为默认值;
-
demo:
@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @interface MyAnnotation2{ String name() default ""; int age() default 0; int id() default -1; String[] schools() default {"abc"}; } @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @interface MyAnnotation3{ String value(); }