一、什么是注解
Annotation是从JDK5.0开始引入的技术。
Annotation的作用
- 本身不是程序,可以对程序作出解释。(这一点和注释没有区别)
- 可以被其他程序(比如:编译器等)读取。(注解信息处理流程(注解解析),是注解和注释的重大区别。如果没有注解信息处理流程,则注解毫无意义)。
Annotation在哪里使用
- 可以附加在package,class,method,field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。
二、内置注解
@Override
定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法打算重写超类中的另一个方法声明。
@Deprecated
定义在java.lang.Deprecated中,此注释可以用于修辞方法、属性、类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
@SuppressWarnings
定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。
三、自定义注解
在实际开发过程中可能需要自己定义注解,或者使用其他公司编写好的注解,所以学习自定义注解是有必要的。
- 使用@interface自定义注解 时,自动继承了 java.lang.Annotation接口
- 要点:
@interface用来声明一个注解 - 格式为:
– public @interface 注解名 {定义体}
– 其中的每一个方法实际上是声明了一个配置参数。
– 方法的名称就是参数的名称
– 返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)
– 可以通过default来声明参数的默认值。
– 如果只有一个参数成员,一般参数名为value
自定义注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface DIYAnnotation {
/* String studentName() default "";
int age() default 0;
String[] schools ()default {"清华大学","北京大学"};*/
// 如果只有一个参数成员,一般参数名为value
String value();
}
使用自定义注解
public class Demo01 {
@DIYAnnotation(studentName = "henrly", schools = {"浙江大学"}, age = 19)
//@DIYAnnotation("henrlu")//只有一个成员参数且设为value时可以忽略参数名
public void test() {
}
}
元注解
- 元注解的作用就是负责注解其他注解。 Java定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。
- 这些类型和它们所支持的类在java.lang.annotation包中可以
找到- @Target
- @Retention
- @Documented
- @Inherited
- @Target
注解仅用于定义是没有意义的,必须掌握注解的解析才能够发挥注解的作用(需要用到反射的技术)