注解小结

来源:互联网 发布:树状图 软件 编辑:程序博客网 时间:2024/06/05 22:53

注解小结

  1. Annotation(注解) JDK5.0及以后版本引入,它的作用是修饰编程元素(编程元素: 类、构造方法、方法、成员变量等).使用注解,不仅方
    便,而且使代码更加简洁.
  2. 在JSE5.0(包 java.lang)中内置了三种注解:

    • @Override: 表示被标注的子类方法将覆盖超类(父类)中的方法.
      这里写图片描述
      子类中复写父类的方法,就表明要覆盖父类中的方法.如果你想要复写父类中方法但错写了什么,被@Override标注的方法在编译期就不会被通过!

    • @Deprecated: 被它标注的元素已经过时,是不赞成使用的,有时编译器会提示一些警告信息,但并不影响程序的编译.
      <img src="/Users/dllo/Desktop/111111111/1.png" width=540/><img src="/Users/dllo/Desktop/111111111/2.png" width=250/>
      可以看到在调用被@Deprecated标注的方法时会出现一个删除线,就是告诉使用者此方法并不是被赞成使用的,但是仍可以使用.比如有一个方法你觉得不太合适,想要删除 但是别人已经引用了好多次,删除会对他人工作产生影响,此时那么就可以用此注解

    • @SuppressWarnings(): 抑制编译器产生警告信息!
      <img src="/Users/dllo/Desktop/111111111/3.png" width=350/>此例子可以取消@Deprecated发出的提示.
      如果您确定警告不会影响代码的安全性,那么就可以添加一个注解,虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高到吗的安全性,因为它将防止您对警告无动于衷,您看到的每一个警告都值得注意!
      <img src="/Users/dllo/Desktop/111111111/4.png" width=280/>
      <img src="/Users/dllo/Desktop/111111111/5.png" width=280/>
      可以看出左侧图片未加泛型,以至于提示警告,右侧加上注解,使抑制编译器产生警告信息!
    • @ SuppressWarnings() 它接收的参数是一个字符串数组
  3. 四个元注解
    java中为我们提供了四种元注解,用来定义(创建)注解: @Target @Retention @Documented @Inherited
    • @Target 表示该注解的使用范围,可能的值在枚举类 ElemenetType 中,包括:
      ElemenetType.CONSTRUCTOR—————————-构造器声明
      ElemenetType.FIELD ————————————–域声明(包括 enum 实例)
      ElemenetType.LOCAL_VARIABLE————————- 局部变量声明
      ElemenetType.METHOD ———————————-方法声明
      ElemenetType.PACKAGE ——————————— 包声明
      ElemenetType.PARAMETER ——————————参数声明
      ElemenetType.TYPE————————————— 类,接口(包括注解类型)或enum声明
    • @Retention 表示在什么级别保存该注解信息,用于描述注解的生命周期。可选的参数值在枚举类型 RetentionPolicy 中,包括:
      RetentionPolicy.SOURCE ———————————注解将被编译器丢弃 (仅在源文件中有效)
      RetentionPolicy.CLASS ———————————–注解在class文件中可用(jvm加载class文件时候被抛弃)
      RetentionPolicy.RUNTIME ——-将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
    • @Documented 将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。
    • @Inherited 允许子类继承父类中的注解。(使用Inherited声明出来的注解,只有在类上使用时才有效).
  4. 注解的语法与定义形式
    就拿我比较常用的@Test ,来看看它的源码:
    <img src="/Users/dllo/Desktop/111111111/6.png" width=550/>
    我们抛去他的方法体不看, 除去”@”是不是很像在定义一个接口,不错,其实你就可以把它理解为一个接口(可以去看它的字节码,实际上是继承自Annotation,仍然是interface),只不过它多了一些限制,使用起来更加方便!那么来看一下这些限制,@target的枚举类属性值为METHOD,表明Test只能为方法注释,@Retention的RUNTIME表示运行时也保留注释.
  5. 自定义注解与使用
    <img src="/Users/dllo/Desktop/111111111/7.png" width=450/>
    <img src="/Users/dllo/Desktop/111111111/8.png" width=750/>

看了几篇博客,试着总结了下,只是为了方便提醒自己,若有相似的地方还望大佬见谅 ~(0.0)~

希望各位大神多加指点