1.注解是什么
对于Annotation,是Java5的新特性。Annotations提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉编译器禁止一些特殊的错误。Annotations使用@annotation的形式应用于代码:类(class),属性(attribute),方法(method)等等。一个Annotation出现在上面提到的开始位置,而且一般只有一行,也可以包含有任意的参数。
2.内置注解
@Override对父类的方法重写
@Deprecated过时的,废弃的
@SuppressWarning 镇压报警信息
SuppressWarning需要添加参数进行使用
参数 | 说明 |
---|---|
deprecation | 使用了过时的类或者方法 |
unchecked | 执行了未检查的转换时的警告,例如当使用集合时没有用泛型来指定集合保存的类型 |
fallthrough | 使用Switch语句时发生case穿透 |
path | 在类路径、源文件路径等中有不存在的路径时的警告 |
serial | 当在可序列化的类上缺少serialVersionUID定义时的警告 |
finally | 任何fianlly子句不能正常完成时的警告 |
all | 关于以上所有情况的警告 |
//取消所有的警告
@SuppressWarnings("all")
//取消多种类型的警告
@SuppressWarnings(value = {"uncheck", "deprecation"})
@SuppressWarnings({"uncheck", "deprecation"})
3.元注解
元注解负责注解自定义注解
1.@Target
用于描述注解的使用范围
参数 | 修饰范围 |
---|---|
ElementType.PACKAGE | 包 |
ElementType.TYPE | 类、接口、枚举、Annotation类型 |
ElementType.CONSTRUCTOR | 构造器 |
ElementType.FIELD | 域 |
ElementType.METHOD | 方法 |
ElementType.LOCAL_VARIABLE | 局部变量 |
ElementType.PARAMETER | 参数 |
//表示该自定义注解只能使用在方法和域上
@Target(value = {ElementType.METHOD, ElementType.FIELD})
public @interface MyAnnotation {
}
2.@Retention
用于描述注解的生命周期
参数 | 作用 |
---|---|
RetentionPolicy.CLASS | 在源文件中有效 |
RetentionPolicy.SOURCE | 在class文件中有效 |
RetentionPolicy.RUNTIME | 在运行时有效,可以被反射机制读取 |
4.自定义注解
/**
* @Target 表示自定义的Annotation可以使用在方法或者域上
* */
@Target(value = {ElementType.METHOD, ElementType.FIELD})
/**
* @Retention 表示自定义的Annotation不仅被保存在class文件中,jvm加载class文件后,仍然存在
* */
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
/**
* 使用Annotation时可使用的参数值,default为默认值
* 当参数只有一个时可以命名为value这样可以使用@Annocation(参数值)的方法使用
*/
String[] value() default {"sdf", "dfa"};
int id() default 0;
}
/*
* 不加参数名时默认使用value名的参数
* */
@MyAnnotation({"asdfa","dfadf"})
public void study(){
}
/*
* 定义多个参数中间用,隔开
* */
@MyAnnotation(value = {"dfaf", "adfasd"},id = 5)
public void study1(){
}
5.通过反射来解析注解
public class Test {
public static void main(String[] args) {
try {
//通过类的全称获得对应类
Class<?> cl = Class.forName("com.fxl.annotation.AnnotationTest");
//获得该类下的study1()方法
Method study = cl.getMethod("study1");
//获得作用在该方法上的MyAnnotation类的注解
MyAnnotation myAnnotation = study.getAnnotation(MyAnnotation.class);
//输出该注解的id参数
System.out.println(myAnnotation.id());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
结果图
个人笔记,有错误还请指出