Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。
注解本质是一个继承了Annotation 的特殊接口,其具体实现类是Java 运行时生成的动态代理类。而我们通过反射获取注解时,返回的是Java 运行时生成的动态代理对象$Proxy1。通过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationInvocationHandler 的invoke 方法。该方法会从memberValues 这个Map 中索引出对应的值。而memberValues 的来源是Java 常量池。
内置注解:
@Override 标记,标注的方法重写父类的方法
@Deprecated 废弃的,不建议使用的,但是也可以用,他有更好的替代品
@SuppressWarning("参数") 抑制,忽略注解中声明的警告
元注解:
@Target 标记这个注解应该是哪种 Java 成员。
@Retention 标记注解的生命周期
@Inherited 标记这个注解是继承于哪个注解类
@Docunment 标记这些注解是否包含在用户文档中。
自定义注解:
1、Annotation 类型定义为@interface, 所有的Annotation 会自动继承java.lang.Annotation这一接2口,并且不能再去继承别的类或是接口。
2、参数成员只能用public 或默认(default) 这两个访问权修饰。
3、参数成员只能用基本类型byte、short、char、int、long、float、double、boolean与一维数组。
4、要获取类方法和字段的注解信息,必须通过Java的反射技术来获取 Annotation 对象,因为你除此之外没有别的获取注解对象的方法。
注意点:
1、自定义注解需要使用到元注解。
2、注解方法不能有参数。
3、注解方法的返回类型局限于原始类型,字符串,枚举,注解,或以上类型构成的数组。
4、注解方法可以包含默认值。