注解是代码级别的说明.
和注释相比:
注释给人看,便于维护
注解是给java虚拟机看的
注解的作用:
1.做编译期检查
@SuppressWarning:抑制警告
@Override 重写父类方法
@Deprecated 标识方法过时,不鼓励使用
2.替代配置文件.必须将注解的@Retention设置为Runtime
自定义注解
注解标识符 @interface 注解跟类和接口是同一个层次的东西.
在注解中可以定义抽象方法(属性)
属性是有类型限制的.可以有基本数据类型,string,Class,枚举类型,以上类型的一维数组
@interface MyAn01{
String s();
int i();
Class c();
MyAn02 m();
String[] ss();
int[] ii();
}
如果一个注解有属性,那么在使用过程中必须给属性赋值
@xxx(属性名=属性值,属性名=属性值...)
如果一个注解的属性是数组形式
@xxx(属性名={属性值1,属性值2...})
如果数组 只给一个值 那么大括号可以省略不写
如果注解中当只有一个属性 并且需要赋值的时候 名字叫做value的 那么可以省略属性名
注解不能在同一个地方出现两次(jdk1.9以前 )
元注解:
@Target 指明注解的使用位置的
ElementType.METHOD 可以方法上
ElementType.TYPE, 可以类或者接口
ElementType.FIELD 可以成员变量
@Retention 指明注解的代码保留阶段SOURCE: 注解只会保留在源代码中
CLASS: 注解保留到class文件
RUNTIME:注解保留到class文件 并且在加载内存的时候 依旧保留
类.方法.接口....isAnnotationPresent(注解.class) 判断某个类 方法 是否含有某个注解的意思
类.方法.接口....getAnnotation(注解.class) 获取注解 获取注解里面属性