注解
注解语法
public @interface TestAnnotation {
}//创建一个名为TestAnnotation的注解
注解的定义
@TestAnnotation //注释通过 @interface 关键字进行定义
public class Test {
}
原注解
元注解也是一张标签,但是它是一张特殊的标签,它的作用和目 的就是给其他普通的标签进行解释说明的
元标签有 :
@Retention
@Documented
@Target
@Inherited
@Repeatable五种
@Retention
应用到一个注解上时,它解释说明了这个注解的存活时间
取值:
@Retention(RetentionPolicy.SOURCE )//注解只在源码阶段保留,编译时丢弃
(RetentionPolicy.CLASS )//注解只保留到.class阶段,但jvm加载class时丢弃
@Retention(RetentionPolicy.RUNTIME )//注解不仅保留到class编译文件种,jvm加载class仍保留
生命周期:SOURCE<CLASS <RUNTIME
//例子
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
}
@Documente
作用是能够将注解种的元素包含到javadoc中去
导出javadoc防止中文乱码需要加上
-encoding UTF-8 -charset UTF-8
@Targe
是指定注解运用的地方
取值:
@Target(ElementType.ANNOTATION_TYPE)//给一个注解进行注
@Target(ElementType.CONSTRUCTOR )//给构造方法进行注解
@Target(ElementType.FIELD )//给属性进行注解
@Target(ElementType.LOCAL_VARIABLE)//给局部变量进行注解
@Target(ElementType.METHOD)//给方法进行注解
@Target(ElementType.PACKAGE )//给一个包进行注解
@Target(ElementType.PARAMETER )//给一个方法内的参数进行注
@Target(ElementType.TYPE )//给一个类型进行注解,比如类、接口、枚举
//例子
@Target(ElementType.CONSTRUCTOR)
public @interface TestAnnotation {
}
@Inherited
继承,不是注解继承,使用了Inherited之后子类继承父类的时候,如果子类没有注解,那么父类的注解被继承
@Repeatable
可重复 Java 1.8 才加进来的
@interface Persons {
Person[] value();
}
@Repeatable(Persons.class)
@interface Person{
String role default "";
}
@Person(role="artist")
@Person(role="coder")
@Person(role="PM")
public class SuperMan{
}
注解的属性
注解的属性也叫做成员变量。注解只有成员变量,没有方法
Java 预置的注解
@Deprecated 用来标记过时的元素
@Override 提示子类要复写父类中被 @Override 修饰的方法
@SuppressWarnings阻止警告的意思
取值:
@SuppressWarnings({"unused"})//不做警告检查
@SafeVarargs参数安全类型注解
目的是提醒开发者不要用参数做一些不安全的操作,它的存在会阻止编译器产生 unchecked 这样的警告。在 Java 1.7 的版本中加入的。