JAVA注解学习笔记
一、JAVA内置注解
- @Override 表示当前方法将覆盖超类中的方法
- @Deprecated 表示当前代码已被弃用
- @SuppressWarnings 取消编译器的某些警告信息
以下四种注解用于定义一个注解类
- @Target 表示注解可以用在什么地方,可能的参数值有:
ElementType.TYPE:注解可用于类,接口,注解类型,枚举的声明
ElementType.FIELD:注解可用于字段声明
ElementType.METHOD:注解可用于方法声明
ElementType.PARAMETER:注解可用于参数声明
ElementType.CONSTRUCTOR:注解可用于构造函数声明
ElementType.LOCAL_VARIABLE:注解可用于局部变量声明
ElementType.ANNOTATION_TYPE:注解可以用在注解声明上
ElementType.PACKAGE:注解可用于包的声明
ElementType.TYPE_PARAMETER:注解可用于类型参数声明(since 1.8)
ElementType.TYPE_USE:类型使用声明(since 1.8)
2.@Retention 注解的生命周期,可能的参数值有:
RetentionPolicy.SOURCE:源码级别,注解将被编译器丢弃
RetentionPolicy.CLASS:注解将包含在.class文件中,但是会被虚拟机丢弃
RetentionPolicy.RUNTIME:将在运行时保留注解,可被反射机制读取注解信息
3.@Document:将注解包含在JavaDoc中
4.@Inherited:允许子类继承父类的注解
二、自定义一个注解
// 一个简单的注解定义
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface DBTable {
String name() default "DBTable";
}
// 使用注解,这里传入的的name值user就可以被反射机制读取
@DBTable(name = "user")
public class UserTable {
...
}
// 一个简单的DBTable注解处理器
public static void genTable(Class<?> tClass) {
DBTable dbTable = tClass.getAnnotation(DBTable.class);
if (dbTable == null) {
System.out.println("Not a DBTable class!");
return;
}
System.out.println("Create table " + dbTable.name());
}
public static void main(String[] args) {
genTable(UserTable.class); // 输出 create table user
}