Java注解

什么是注解?

注解,也被称为元数据(描述数据的数据<==>data about data).在Java1.5中被引入.注解可以将元数据保存在Java源代码中,并利用annotation API为自己的注解构造处理工具.此外,注解的优点还包括:更加干净易读的代码以及编译期类型检查等.

三种内置注解

@Override : 表示当前的方法覆盖超累中的方法.如果方法签名对不上,编译器就会发出错误提示.

@Deprecated : 标在方法上表示方法已弃用(也可以说是表示已过期).

@SuppressWarnings : 关闭不当的编译器警告.

四种元注解

元注解专门负责新注解的创建,在自建注释时使用

@Target : 表示该注解可以用于什么地方.主要的ElementType参数包括:

  CONSTRUCTOR : 构造器的声明

  FIELD : 域(属性)声明,包括enum实例

  LOCAL_VARIABLE : 局部变量声明

  METHOD : 方法声明

  PACKAGE : 包声明

  PARAMETER : 参数声明

  TYPE : 类,接口(包括注解类型)或enum声明

  @Target注解可以指定多个ElementType,用逗号分隔,表示能应用于多个类型,如果省略掉@Target注解不用,则表示该注解可应用于所有的ElementType

@Retention : 用来规定注解在哪一个级别可用,可选的RetentionPolicy参数包括:

  SOURCE : 源代码中,注解将被编译器丢弃.

  CLASS : 类文件中,会被VM丢弃.

  RUNTIME : 运行时,VM将在运行期也保留注解,因此可以通过反射机制读取注解的信息.

@Documented : 将此注解包含在javadoc中

@Inherited : 允许子类继承父类中的注解

自定义注解示例

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
// @interface 表示声明一个注解
// Test 是自定义注解的注解名
public @interface Test {
    // 声明注解的元素,写法类似于接口的方法
    public int value();
    // 可以用default关键字为元素设定默认值
    public String description() default "no description";
    
    // *默认值限制* : 元素必须有值,要么具有默认值,要么使用注解时提供元素的值.
    // 默认值不能为null,为了绕开这个约束,我们可以定义一些特殊的值,例如空字符串
    // 或者负数,以此表示某个元素不存在;
    public String company() default "";
    public int age() default -1;
   
    // *注解元素的可用类型*
    // 所有基本类型(int, boolean, float等)
    // String
    // Class
    // enum
    // Annotation (注解也可以作为元素的类型,也就是说注解可以嵌套)
    // 以上类型的数组
    // 如果使用其他类型,编译器就会报错
 
    // 注解不支持继承,但可以在注解内嵌套注解实现相同的功能
    public TestAnnotation  testAnno() default @TestAnnotation(name="LiSi");

    // 快捷方式 : 如果注解只有value元素没有默认值,其他元素全都有默认值
    //               即在应用该注解时,value元素是唯一需要赋值的一个元素
    //               那么在使用value注解时,无需使用名-值对的方法,
    //               直接在括号内给出value元素所需的值即可(必须将此元素命名为value)
    //               例如 : @RequestMapping("/login")

    // 没有元素的注解被称为标记注解(marker annotation)
}

1.默认值限制

2.注解元素可用类型

3.注解不支持继承

4.快捷方式

5.标记注解

注解的使用

参考Spring, SpringMVC中注解的使用.或者比如@Override注解.

注解处理器

未完待续

使用apt处理注解 

未完待续

Thinking in Java读到了629页

posted @ 2019-04-16 23:51  Kaneha  阅读(117)  评论(0编辑  收藏  举报