Java注解和反射01:注解
什么是注解
注解不是程序本身,可以对程序作出解释(这点和注释一样)
注解以“@注解名”的形式存在,可以附加在package、class、method、field上,可以通过反射机制编程实现对这些元数据的访问,可以被其他程序(比如编译器)读取
内置注解
@Override、@Deprecated
@SuppressWarnings,用来抑制编译时的警告信息,需要传入一个参数
元注解
元注解的作用是注解其他注解,Java定义了4个标准元注解
@Target,用于描述注解的使用范围
@Retention,表示需要在什么级别保存该注解信息,用于描述注解的生命周期(SOURCE < CLASS < RUNTIME)
@Documented,说明该注解将被包含在javadoc中
@Inherited,说明子类可以继承父类中的该注解
自定义注解
如果只有一个参数,名字一般为value,这样可以直接写值
返回值类型就是参数的类型(只能是基本类型Class、String、enum)
注解参数必须要有值,可以通过default来声明参数的默认值
import java.lang.annotation.*;
/**
* @Target()指定注解的使用范围
* @Retention()指定注解的生效周期
* @Documented表示将注解生成在javadoc中
* @Inherited表示子类可以继承该注解
*/
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Inherited
/**
* @interface自定义注解
*/
@interface MyAnnotation{
/**
* 定义参数:参数类型 参数名() default 值
* 如果值为-1说明不存在
*/
String name();
int age() default 0;
int id() default -1;
String[] title();
}
@interface MyAnnotation2{
String value();
}
/**
* 如果注解参数设置了默认值可以不用写
*/
@MyAnnotation(name = "ty", title = {"student", "son"})
@MyAnnotation2("ty")
class test{}