一、什么是java注解
一、概念
1、java注解:说明程序的,是给计算机看的,也叫元数据,一种代码级别的说明。又叫java标注,是jdk1.5引入的一种注释机制,与类、接口、枚举是在同一个层次,可以声明在包,类,字段,局部变量里面,方法参数等前面。用来对这些元素进行说明。
2、java注释:用文字描述程序的,主要是用来给程序员看的
二、作用分类
1、编辑文档:通过代码里标识的注解生成文档(javadoc xx.java)
2、代码分析:通过代码里标识的注解对代码进行分析(使用反射)
3、编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查(Override)
三、java注解分类
1、jdk预定义注解:
1、@Override:标记在子类中是否重写了父类的方法,如果不是则会报错
2、@Deprecated:标记此方法已过时
3、@SuppressWarnings:压制警告
2、元注解:元注解可以理解为注解的注解
1、@Retention:标注注解的保存时期,一般有:SOURCE、CLASS、RUNTIME(当前描述的注解会被保留到class字节文件中,并被jvm读取到)
2、@Documented:使用此注解可以让注解保存到javadoc文档中
3、@Target:注解的类型,可以是在类上,方法上等
4、@Inherirted:标注注解是否可以继承
3、新增注解:
1、@SafavarArgs:忽略方法或者构造方法的参数为泛型所产生的警告
2、@FuntionalInterface:标注一个函数性接口
3、@Repeatable:标识某注解可以在同一个声明上使用多次
二、自定义注解
一、格式:
public @Interface 注解名称{
属性列表;
}
二、本质:
注解本质上就是一个接口,该接口默认继承Annotation接口
public interface test extends java.lang.annotation.Annotation{}
三、属性 :接口中的抽象方法
1、属性的返回值有下列取值
1、基本数据类型
2、String
3、枚举
4、注解
5、Class
6、以上类型的数组
2、定义了属性,在使用是需要给属性赋值
1、如果定义属性时使用了关键字default给属性设置了默认值,那么在使用时就可以不用给属性赋值,而这个时候会使用默认值
2、如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接赋值即可
3、如果需要赋值的是数组类型,则需要使用{}包裹,如果数组中只有一个值,则{}可以省略
四、在程序中使用注解
一、步骤:
主要是获取注解中定义的属性值
1、获取注解定义的位置的对象(Class,Method,Field)
2、获取指定的注解
3、调用注解中的抽象方法获取配置的属性值
二、栗子
1、创建自定义注解
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface Test{
String value();
}
2、使用自定义注解
public class TestClient {
@Test(value="test example")
public void test(){
System.out.println("test example");
}
}
3、测试
public class TestDemo {
public static void main(String[] args) throws Exception {
TestClient testClient =new TestClient ();
Method method=testClient .getClass().getMethod("test");
if(method.isAnnotationPresent(Test.class)){
Test test=method.getAnnotation(Test.class);
System.out.println("Value : "+test.value());
//执行方法
method.invoke(testClient); }
}
}