虽然Java 中预先定义的有注解,但还是需要我们自己去添加新的注解,并按照我们自己的方式使用它们。

    自定义注解:Java中提供了四种注解(图20-1),专门负责新的注解的创建。
    图20-1image.png
    语法:@interface
    定义Test注解

    1. @Target(ElementType.METHOD)
    2. @Retention(RetentionPolicy.RUNTIME)
    3. public @interface Test {
    4. }
    1. 在定义注解的时候,会需要元注解(Java提供的四种注解)如@Target:表示的该注解应用于什么地方(方法、域、类...),@Retention:则表示该注解在哪一个级别可以使用;源代码中(SOURCE)、类文件中(CLASS)、运行时(RUNTIMEE)。<br />** 元素:**<br /> ①同时注解中也可以添加元素用来表示某些值,当分析处理注解的时候,程序或工具可以利用些值,没有元素的注解称为标记注解(如:Test注解),<br /> 在注解中添加元素:
    1. @Target(ElementType.METHOD)
    2. @Retention (RetentionPolicy.RUNTIME)
    3. public @interface UseCase {
    4. int id();
    5. String description() default "no description";
    6. }


    ②注解元素的类型;注解中元素可用的类型如下:

    1. 所有基本类型
    2. String
    3. Class
    4. enum
    5. Annotation


    ③:注解默认值:对于注解元素来说不能有不确定的值,要么具有默认值,要么在使用时为其提供值。同时,对于飞基本类型的元素,不能以null作为默认值。所以我们只能自己定以一下特殊的值来表示元素不存在

    1. @Target(ElementType.METHOD)
    2. @Retention (RetentionPolicy.RUNTIME)
    3. public @interface UseCase {
    4. int id() default 0;
    5. String description() default "no description";
    6. }
    1. <br />**注解中元素的使用:**<br /> 注解元素的使用为:名-值的形式,同时需要置于注解声明的括号内,如注解中的元素是唯一需要复制的元素,就可以只给出值就可以
    1. @UseCase(id = 47,description = "Passwords must contain")//普通的注解元素使用
    2. @SQLString(30) String firstName;//注解元素快速的使用

    注解的关系:注解之间不允许继承,但是我们可以在一个注解中嵌套另一个注解

    1. @Target(ElementType.FIELD)
    2. @Retention(RetentionPolicy.RUNTIME)
    3. public @interface SQLInteger {
    4. String name() default "";
    5. Constraints constraints() default @Constraints;//嵌套了Constraints注解
    6. }

    与注解有关的API:
    1.getAnnotaion(Annotaion.class),返回指定类型的注解对象,可以用作检查一个类中是否有指定的注解
    2.getDeclaredAnnotaion()该方法返回一个域上所以的注解数组。
    3.注解也可以使用instanceof来判读是否是指定的类型。