java 反射加注解_java注解 与 反射

java注解 与 反射

java(Annotation)注解,要通过反射(Reflection)才能发挥其强大的功能

一:注解

1:什么是注解(Annotation)?

* 注解:说明程序的。给计算机看的

* 注释:用文字描述程序的。给程序员看的

* 定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

* 概念描述:

* JDK1.5之后的新特性

* 说明程序的

* 使用注解:@注解名称

* 作用分类:

①编写文档:通过代码里标识的注解生成文档【生成文档doc文档】

②代码分析:通过代码里标识的注解对代码进行分析【使用反射】

③编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】

2:内置注解: JDK中预定义的一些注解

* @Override    :检测被该注解标注的方法是否是继承自父类(接口)的

* @Deprecated:该注解标注的内容,表示已过时

* @SuppressWarnings:压制警告

* 一般传递参数all  @SuppressWarnings("all")

3:元注解:用于描述注解的注解

* @Target:描述注解能够作用的位置

* ElementType取值:

* TYPE:可以作用于类上

* METHOD:可以作用于方法上

* FIELD:可以作用于成员变量上

* @Retention:描述注解被保留的阶段

* @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到

* @Documented:描述注解是否被抽取到api文档中

* @Inherited:描述注解是否被子类继承

//定义一个注解//Target 表示这个注解可以用在哪些地方 方法上,参数上?//FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE,TYPE_PARAMETER,TYPE_USE,MODULE;

//ElementType.CONSTRUCTOR: 构造器声明

//ElementType.FIELD: 成员变量、对象、属性(包括enum实例)

//ElementType.LOCAL_VARIABLE: 局部变量声明

//ElementType.METHOD: 方法声明

//ElementType.PACKAGE: 包声明

//ElementType.PARAMETER: 参数声明

//ElementType.TYPE: 类、接口(包括注解类型)或enum声明

@Target(value = {ElementType.METHOD,ElementType.TYPE})//Retention 表示我们的注解在什么地方有效 SOURCE,CLASS,RUNTIME;

@Retention(value = RetentionPolicy.RUNTIME)//Documented 表示是否将这个注解生成在javadoc文档中

@Documented//Inherited 表示子类可以继承父类的注解

@Inherited

@interfaceMyAnnotation{

}

4:简单的注解编写,运用

public classtestDemo2 {

@MyAnnotation2(age= 22 , name = "wu小强")public voidtest2(){

}//当参数只有一个的时候,参数名可以省略,及下面的value//@MyAnnotation3(value="wu小强")

@MyAnnotation3("wu小强")public voidtest3(){

}

}

@Target({ElementType.METHOD,ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@interfaceMyAnnotation2{//注解的参数 : 参数类型 + 参数名 () +默认值

String name() default "";intage();int id() default -1;//如果默认值为-1,代表不存在

String[] schools() default "四川大学,成都大学";

}

@Target({ElementType.METHOD,ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@interfaceMyAnnotation3{

String value();

}

二:反射 (Reflection)

下面这一篇讲反射讲得很好

你可能感兴趣的