1、什么是注解
(1)Annotation是从JDK5.0开始引入的新技术。
(2)Annotation的作用:
① 不是程序本身,可以对程序作出解释;
② 可以被其他程序(比如:编译器等)读取。
(3)Annotation的格式:注解是以“@注释名”在代码中存在的,还可以添加一些参数值。
(例如:@SuppressWarnings(value="unchecked"))
(4)注解附加在package,class,method,field等上面,相当于添加额外的辅助信息,可以通过反射机制编程实现对这些元数据的访问。
2、内置注解
(1)@Override:定义在java.lang.Override中,此注释只适用于修饰方法,表示一个方法声明打算重写超类中的另一个方法声明。
(2)@Deprecated:定义在java.lang.Deprecated中,此注释可以用于修饰方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它和危险或者存在更好的选择。
(3)@SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。该注解需要添加一个参数才能正常使用,例如:@SuppressWarnings("all")、@SuppressWarnings("unchecked")等。
3、元注解
(1)元注解的作用就是负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明。
(2)这些类型和它们所支持的类在java.lang.annotation包中可以找到(@Target,@Retention,@Documented,@Inherited)。
① @Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方);
② @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期;
③ @Document:说明该注解将被包含在javadoc中;
④ @Inherited:说明子类可以继承父类中的该注解。
4、自定义注解
(1)使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口
(2)@interface用来声明一个注解,格式:public @interface 注解名 { 定义内容 }
(3)其中的每一个方法实际上是声明了一个配置参数
(4)方法的名称就是参数的名称
(5)返回值类型就是参数的类型(返回值只能是:基本类型,Class,String,enum)
(6)可以通过default来声明参数的默认值
(7)如果只有一个参数成员,一般参数名为value
(8)注解元素必须要有值,定义注解元素时,经常使用空字符串,0作为默认值
5、代码演示
package cn.sxy.demo01;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//自定义注解
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Test01 {
int age();
String name() default "";
String[] book();
}
//使用自定义注解
class Test{
//注解中定义有参数,使用注解的时候就需要添加参数
@Test01(age = 18,name = "张三",book = {"Java入门","java精通"})
public void show(){
}
//注解中使用default定义有默认值,则使用注解的时候可以不添加参数
@Test01(age=20,book = "Java入门")
public void show01(){}
}
package cn.sxy.demo01;
import java.lang.annotation.*;
@DesignAnnotation
public class TestAnnotation {
@DesignAnnotation
public static void show() {
}
}
//自定义注解
//@Target 被描述的注解可以用在什么地方
@Target({ElementType.METHOD, ElementType.TYPE})
//@Retention 用于描述注解的生命周期
//SOURSE < CLASS <RUNTIME
@Retention(RetentionPolicy.RUNTIME)
//@Documented 说明该注解将被包含在javadoc中
@Documented
//@Inherited 说明子类可以继承父类的该注解
@Inherited
@interface DesignAnnotation {
}