注解(Annotation):
相当于一种标记,标记可以加加在包,类,属性,方法,方法参数,局部变量上
没有外部解析工具等对注解加以解析和处理的,则不会对代码的产生任何的影响。一般使用反射读取注解信息
-----------------------------------------------------------------------------------
内置注解:
@Override:限定重写父类方法, 该注释只能用于方法
@Deprecated:用于表示某个程序元素(类, 方法等)已过时,不建议使用
@SuppressWarnings:抑制编译器警告
-------------------------------------------------------------
元注解:描述注解的注解,只能使用注解上的注解
@Target:说明注解可以出现在哪些地方 不添加此注解表示该注解类可以在任何地方使用
一般使用枚举类ElementType的枚举常量
TYPE代表类 FIELD代表属性 METHOD代表方法
@Retention:注解的生命周期,三种取值
RetentionPolicy.SOURCE
RetentionPolicy.CLASS
RetentionPolicy.RUNTIME 反射调用 使用这个值
@Inherited:指示注释类型被自动继承。
注解继承:
方法上的注解是否被继承只是否重写有关,如果重写了父类的方法,则父类方法上的注解就不会被继承过来。
类上的注解是否能够被继承,与注解是否被@Inherited有关
--------------------------------------------------------------
自定义注解:
1)定义注解类:public @interface 类名 默认继承Annotation类
2)每个方法声明定义为一个元素(成员变量)
方法的返回值类型就是元素类型,方法不能有参数
方法的返回值类型:
基本数据类型,String,Class,枚举,注解及它们的数组
每个自定义注解类都有这个方法: annotationType() 返回此注解对象的类型 返回值是class对象
方法可以给默认值 例: String value() default "HELLO" ;
--------------------------------------------------------------
Class类 Field类 Method类 使用注解常用方法:
Class类独有的: isAnnotation() 如果此class对象表示一个注解类型,则返回 true;否则返回 false
isAnnotationPresent(Class<? extends Annotation> annotationClass) 如果指定类型的注解存在于此元素上,则返回 true,否则返回 false。参数为注解类的class对象
getAnnotation(Class<A> annotationClass) 如果存在该元素的指定类型的注释,则返回这些注解,否则返回 null。参数为注解类的class对象
getAnnotations() 返回此元素上存在的所有注解。 返回值为Annotation[] 注解数组