注解
- Annotation:
- 不是程序本身,可以对程序作出解释
- 可以被其他程序(比如编译器等)读取 像之前我们的重写toString()方法,toString()方法上面的 @Override就是一个注解
@Override //重写方法的重写
public String toString() {
return "@Override是一个注解";
}
- Annotation的格式:
注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")。
- Annotation的使用范围:
可以在package,class,method,field等上面,相当于给它们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。
内置注解
- 种类:
- @Override:定义在java.lang.Override中,此注解只适用于修辞方法,表示一个方法的声明打算重写超类中的另一个方法声明。
- @Deprecated:java.lang.Deprecated中,此注解适用于修辞方法、属性、类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择。
- @SuppressWarnings:java.lang.SuppressWarnings中,用来抑制编译时的警告信息。 与前两个注解不同,这个注解需要添加一个参数
- 简单的代码演示:
元注解
- 元注解的作用:负责注解其他注解,Java定义了4个标准的meta-annotation类型,它们提供了对其他annotation类型做出说明
- 4个标准meta-annotation类型:
- @Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
- @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)
- @Document:说明该注解将被包含在javadoc中
- @Inherited:说明子类可以继承父类中的该注解
自定义注解
package AnnotationStudy;
import java.lang.annotation.*;
//自定义注解
public class demo03 {
//注解可以显示赋值,如果没有默认值,我们就必须给注解赋值
@MyAnnotation(age = 18)
public void test1() {
}
}
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
//注解的参数:参数类型 + 参数名();
//String name();
String name() default "";//设置了默认值
int age();
//int age() default 0;
//int id();
int id() default -1;//如果默认值为-1,代表不存在
}
**注意:**正常的自定义注解,没有那么多变量,正常只有一个,而且以 value作为参数名称( 好处:以value作为参数的话,@MyAnnotation(age = 18)中的 age= 就可以省略,直接写18)