1.什么是注解?
对程序代码本身的描述-代码元数据,一种约定的规范,包括格式、意义、作用域等。
2.基本概念
- 注解对象:注解可以被用在包,类,方法,变量,参数上;
- 注解不会直接影响被注解的代码,这只会向第三系统提供关于自己的信息以用于不同的需求;
- 注解会被编译至class文件中,而且会在运行时被处理程序提取出来用于业务逻辑。当然,创建在运行时不可用的注解也是可能的,甚至可以创建只在源文件中可用,在编译时不可用的注解。
3.程序如何使用注解?
利用被注解代码并根据注解信息产生不同行为。
4.内建注解
Java语言自带了一系列的注解。在本章中我们将阐述最重要的一部分。这个清单只涉及了Java语言最核心的包,未包含标准JRE中所有包和库如JAXB或Servlet规范。
以下讨论到的注解中有一些被称之为Meta注解,它们的目的注解其他注解,并且包含关于其它注解的信息。
@Retention:这个注解注在其他注解上,并用来说明如何存储已被标记的注解。这是一种元注解,用来标记注解并提供注解的信息。可能的值是:
- SOURCE:表明这个注解会被编译器忽略,并只会保留在源代码中。
- CLASS:表明这个注解会通过编译驻留在CLASS文件,但会被JVM在运行时忽略,正因为如此,其在运行时不可见。
- RUNTIME:表示这个注解会被JVM获取,并在运行时通过反射获取。
@Target:
这个注解用于限制某个元素可以被注解的类型。例如:
- ANNOTATION_TYPE 表示该注解可以应用到其他注解上
- CONSTRUCTOR 表示可以使用到构造器上
- FIELD 表示可以使用到域或属性上
- LOCAL_VARIABLE表示可以使用到局部变量上。
- METHOD可以使用到方法级别的注解上。
- PACKAGE可以使用到包声明上。
- PARAMETER可以使用到方法的参数上
- TYPE可以使用到一个类的任何元素上。
@Documented:
被注解的元素将会作为Javadoc产生的文档中的内容。注解都默认不会成为成为文档中的内容。这个注解可以对其它注解使用。
@Inherited:
在默认情况下,注解不会被子类继承。被此注解标记的注解会被所有子类继承。这个注解可以对类使用。
@Deprecated:
说明被标记的元素不应该再度使用。这个注解会让编译器产生警告消息。可以使用到方法,类和域上。相应的解释和原因,包括另一个可取代的方法应该同时和这个注解使用。
@SuppressWarnings:
说明编译器不会针对指定的一个或多个原因产生警告。例如:如果我们不想因为存在尚未使用的私有方法而得到警告可以这样做:
@SuppressWarnings( "unused")
privateString myNotUsedMethod(){
...
}
通常,编译器会因为没调用该方而产生警告; 用了注解抑制了这种行为。该注解需要一个或多个参数来指定抑制的警告类型。
@Override:
向编译器说明被注解元素是重写的父类的一个元素。在重写父类元素的时候此注解并非强制性的,不过可以在重写错误时帮助编译器产生错误以提醒我们。比如子类方法的参数和父类不匹配,或返回值类型不同。
@SafeVarargs:
断言方法或者构造器的代码不会对参数进行不安全的操作。在Java的后续版本中,使用这个注解时将会令编译器产生一个错误在编译期间防止潜在的不安全操作。
欢迎大家关注我的公众号