一.什么是注解:

     注解是标记,也可以理解成是一种应用在类、方法、参数、属性、构造器上的特殊修饰符。注解作用有以下三种:

       第一种:生成文档,常用的有@param@return等。

       第二种:替代配置文件的作用,尤其是在spring等一些框架中,使用注解可以大量的减少配置文件的数量。

       第三种:检查代码的格式,如@Override,标识某一个方法是否覆盖了它的父类的方法。

二.注解的底层实现原理:

        注解的底层也是基于反射实现的,注解和接口有点类似,不过申明注解需要加上@interface

        注解里面只支持基本类型,String 及枚举类型。里面的属性被定义成方法,并允许默认值

        java 5开始在java.lang.annotations中提供了四种元注解,专门注解其他注解

1,Targert 注解用于什么地方

 (1) TYPE, 类(型)注解

 (2) FIELD, //字段注解,不要忘了,字段可以是对象

 (3)METHOD, //方法注解

 (4)PARAMETER, //参数注解

 (5)CONSTRUCTOR, //构造方法注解

(6)  LOCAL_VARIABLE, //局部变量注解

(7)  ANNOTATION_TYPE,//注解注解

(8) PACKAGE, //包注解

2, @Retention — —注解运行状态

   SOURCE, //源码状态运行,

   CLASS, //编译类文件时运行

   RUNTIME //运行时运行

3, @Documented — — 生成说明文档,添加类的解释 

4,  @Inherited — —允许子类继承父类中的注解。

定义注解类:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EMAIL{
String name() default "";
}

使用
@EMAIL
public class test {

}