注解 Annotation
一、Annotation的使用示例
示例一:生成文档的相关注解
-
@author 标明开发该类模块的作者,多个作者之间使用逗号分割。
-
@version 标明该类模块的版本。
-
@see 参考转向,也就是相关主题。
-
@since 从那个版本开始增加的。
-
@param 对方法中某参数的说明,如果没有参数则不写。
-
@return 对方法返回值的说明,如果方法的返回值类型是void就不能写。
-
@exception 对方法可能抛出的异常进行说明,如果方法没有用throw显示抛出的异常就不能写。
注意点:
- @param @return 和@exception,这三个标记都是只用于方法的。
- @param的格式要求:@param形参名 形参类型 形参说明。
- @return的格式要求:@return返回值类型 返回值说明。
- @exception的格式要求:@exception异常类型说明。
- @param和@exception 可以并列多个。
示例二:在编译时仅仅格式检查(JDK内置的三个基本注解)
- @Override:限定重写父类方法,该注解只能用于方法。
- @Deprecated:用于表示所修饰的元素(类、方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择。
- @SuppressWarnings:抑制编译器警告。
举例:
public class AnnotationTest {
public static void main(String[] args) {
Person student = new Student();
student.walk();
@SuppressWarnings("unused")
int num=10;
//num是灰色的,Idea中不会提示,使用@SuppressWarnings编译警告
//在eclipse中会有警告提示,使用@SuppressWarnings编译警告
@SuppressWarnings({"unused","rawtypes"})
ArrayList arrayList = new ArrayList();
}
}
class Person{
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name=name;
this.age=age;
}
public void walk(){
System.out.println("人散布");
}
public void eat(){
System.out.println("人吃饭");
}
}
//接口关键字 interface,可以实现多个接口implements
interface Info{
void show();
}
class Student extends Person implements Info{
//在子类中对父类的方法进行重写
@Override
public void walk() {
System.out.println("学生走路");
}
@Override
public void show() {
}
}
二、如何自定义注解:参照@SuppressWarnings定义
- 注解声明为**@interface**关键字
- 内部定义成员,通常使用value表示
- 可以指定成员的默认值。使用default定义
- 如果自定义注解没有成员,标明是一个表示作用
如果注解有成员,在使用注解时,需要指明成员的值。
1、注解声明为**@interface**关键字
2、自定义注解自动继承了java.lang.annotation.Annotation接口
3、Annotation的成员变量在Annotation 定义中以无参数方法的形式来声明。其
方法名和返回值定义了该成员的名字和类型。我们称为配置参数。类型只能
是八种基本数据类型、String类型、Class 类型、enum类 型、Annotation类 型、
以上所有类型的数组。
4、可以在定义Annotation的成员变量时为其指定初始值,指定成员变量的初始
值可使用default关键字。
5、如果只有一个参数成员,建议使用参数名为value
6、如果定义的注解含有配置参数,那么使用时必须指定参数值,除非它有默认
值。格式是“参数名=参数值”,如果只有一个参数成员,且名称为value,
可以省略“value=“
7、没有成员定义的Annotation 称为标记;包含成员变量的Annotation 称为元数
据Annotation。
注意:自定义注解必须配上注解的信息处理流程才有意义。
三、元注解(4种)
对现有的注解进行修饰的注解
自定义注解必须配上注解的信息处理流程(使用反射)才有意义
自定义注解通过都会指明两个元注解:Retention、Target
-
Retention
-
Target
-
Documented和Inherited(出现的频率少)
四、注解的新特性(JDK 8)
1、可重复注解:
- 在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class
- MyAnnotation的Target和MyAnnotations相同
2、类型注解:
- ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)
- ElementType.TYPE_USE 表示该注解能写在使用类的任何语句中。
MyAnnotation的Target和MyAnnotations相同
2、类型注解:
- ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)
- ElementType.TYPE_USE 表示该注解能写在使用类的任何语句中。