注解Annotation
1、什么是注解
-
Annotation 从JDK5.0开始引入
-
Annotation 作用:不是程序本身,可以对程序作出解释,可以被其他程序(编译器)读取,通过反射读取
-
Annotation 格式:
@注释名
可以添加参数值 -
注解在哪里使用:可以添加在package,class,method,field等上面,相当于添加了额外的信息,通过反射机制进行编程来实现对这些元数据的访问
2、内置注解
-
@Override :定义在java.lang.Override中。检查该方法是否是重写方法,没有重写会报编译错误。只适用于修饰方法。
-
@Deprecated :定义在java.lang.Deprecated中。标记过时方法,不鼓励程序员使用,因为危险或存在更好的选择。如果使用该方法,会报编译警告。
-
@SuppressWarnings :定义在java.lang.SuppressWarnings中。抑制编译时的警告信息。该注释需要添加参数。
- @SuppressWarnings("all")
- @SuppressWarnings("unchecked")
- @SuppressWarnings(value={"unchecked","deprecation"})
package com.company.annotation; @SuppressWarnings("all") public class test01 { @Override public String toString() { return super.toString(); } @Deprecated public static void test(){ System.out.println("Deprected"); } public static void main(String[] args) { test(); } }
3、元注解
元注解的作用是负责注解其他注解,Java定义了4个标准的meta-annocation类,对其他annocation类型作说明,在java.lang.annotation中可以找到。
- @Target :描述注解的适用范围(即:被描述的注解可以用在什么地方)。
- @Retention :表示需要在什么级别保存该注释信息,用于描述注解的生命周期。
- SOURSE < CLASS < RENTIME
- @Document :说明该注解将被包含在javadoc中
- @Inherited :说明子类可以继承父类中的注解
4、自定义注解
- 使用
@interface
自定义注解时,自动继承了java.lang.Annotation接口。 - 分析:
@interface
用来声明一个注解,格式:@interface 注解名 {定义内容}
- 其中的每一个方法实际上是声明了一个配置参数
- 方法的名称就是参数的名称
- 返回值的类型就是参数的类型,返回值只能是基本类型class、String、enum
- 可以通过default来声明默认的参数值
- 如果只有一个参数,一般参数名为value
- 注解元素必须要有值,我们定义注解时一般使用空字符串或0作为默认值
package com.company.annocation;
import java.lang.annotation.*;
public class test02 {
//注解没有默认值,必须给注解赋值
@MyAnnotation(name = "123")
public void test() {
}
//如果只有一个参数,一般参数名为value
@MyAnnotation2("123")
public void test2() {
}
}
//定义一个注解
//Target 表示我们的注解可以用在哪些地方
@Target(value = {ElementType.METHOD, ElementType.TYPE})
//Retention 表示我们的注解在什么地方有效
@Retention(value = RetentionPolicy.RUNTIME)
//Documented 表示将注解生成在JAVAdoc中
@Documented
//Inherited 子类可以继承父类的注解
@Inherited
@interface MyAnnotation {
//注解的参数:参数类型+参数名()
String name();
int age() default 0;
int id() default -1; //如果默认值为-1,代表不存在
String[] schools() default {"YSU","BJU"};
}
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotation2 {
String value();
}