什么是注解?
Annotation是从JDK5.0开始引入的新技术。
Annotation的作用:
- 不是程序本身,可以对程序作出解释。
- 可以被其他程序(比如编译器)等读取。(注解信息处理流程,是注解和注释的重大区别。如果没有注解信息处理流程,则注解毫无意义)
Annotation的格式:
-可以是“@注释名”在代码存在的,还可以添加一些参数值,例如:@SuppressWarning(value="unchecked")。
Annotation在哪里使用
- 可以附加在package,class,method,field等上面,相当于给他们添加了额外的辅助信息,可以通过反射机制编程实现对这些元数据的访问
Java中常用的内置注解
- @Override
定义在java.lang.Override中,此注释只适合用于修饰方法,表示一个方法声明在打算重写超类的另外一个方法声明
- @Deprecated
定义在java.lang.Deorecated中,此注释可以用于修饰方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择
- @SuppressWarnings
定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息
使用该注解的时候需要添加一个参数才能正确使用,这些参数值都是定义好的,如下
自定义注解
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口
要点:
- @interface用来声明一个注解
格式为:
- public @interface 注解名 {定义体}
- 其中的每一个方法实际上是声明了一个配置参数。
- 方法的名称就是参数的名称
- 返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)
- 可以通过default来声明参数的默认值。
- 如果只有一个参数成员,一般参数名为value
注意:
注解元素必须要有值。我们定义注解元素时,经常使用空字符串、0作为默认值。
也经常使用负数(比如:-1)表示不存在的含义
元注解
元注解的作用就是负责注解其他注解。 Java定义了4个标准的
meta-annotation类型,它们被用来提供对其它 annotation
类型作说明。
•这些类型和它们所支持的类在java.lang.annotation包中可以找到
- @Target
- @Retention
- @Documented
- @Inherited
常用的两个是@Target,@Retention
@Target
作用:
- 用于描述注解的使用范围(即:被面熟的注解可以用在什么地方)
@Retention
作用:
- 表示需要在什么级别保存该注释信息,用户描述注解的生命周期
举例:
package com.choi.java.annotation;
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 MyAnnotation01 {
String studentName() default ""; //注意“studentName()”不表示方法
int age() default 0;
int id() default -1;
String[] schools() default {"AA","BB"};
}
package com.choi.java.annotation;
@MyAnnotation01
public class Demo01 {
@MyAnnotation01(age=19,studentName="菜菜",id=1001,
schools={"aa","vv"})
public void test(){
}
public void test1(){
}
}