zoukankan      html  css  js  c++  java
  • Java注解基础

    1. 注解(Annotation)

    1. 位于源码中(代码/注释/注解),使用其他工具进行处理的标签
    2. 注解用来修饰程序的元素,但不会对被修饰的对象有直接的影响
    3. 只有通过某种配套的工具才会对注解信息进行访问和处理
    4. 主要用途
      • 提供信息给编译器/IDE工具
      • 可用于其他工具来产生额外的代码/配置文件等
      • 有一些注解可在程序运行时访问,增加程序的动态性

    普通自带注解:(直接修饰JAVA对象)

    1. @Override 表示继承和改写
    2. @Deprecated 表示废弃
    3. @SuppressWarnings 表示压制警告
    4. @SafeVarargs 不会对不定项参数做危险操作
    5. @FunctionInterface 声明功能性接口

    元注解:(可以修饰注解)

    1. @Target 设置目标范围
    2. @Retention 设置保持性
    3. @Documented 文档
    4. @Inherited 注解继承
    5. @Repeatable 此注解可以重复修饰

    自定义注解:

    2. 普通注解

    1. @Override

      1. 修饰方法,检查该方法是父类的方法,如果不是编译器会报错
      2. 避免代码错误
    2. @Deprecated

      1. 修饰类/类的元素/包
      2. 标注为废除,建议程序员不再使用这个类/元素/包
    3. @SuppressWarnings("")

      1. 可以修饰变量/方法/构造函数/类等
      2. 压制各种不同类型的警告信息,使得编译器不显示警告
      3. @ SuppressWarnings 常用警告类型:
        • @SuppressWarnings("all"),忽略所有的警告
        • @SuppressWarnings("cast"),忽略类转型警告
        • @SuppressWarnings("serial"),忽略实现Serializable接口的,没有定义serialVersionUID
        • deprecated,unchecked
        • 使用javac -X 可以看当前的编译器使用哪些警告类型

    3. 元注解

    元注解是用来修饰注解的注解,修饰定义的注解

    1. @Retention(保留注解)

      1. 这个注解用来修饰其他注解的存在范围

      2. @Retention(RetentionPolicy.SOURCE) 注解仅存在.java,不在class文件。(不能通过反射获取)

      3. @Retention(RetentionPolicy.CLASS) 这是默认的注解保留策略注解存在于.class文件,但是不能被JVM加载。(不可以通过反射获取)

      4. @Retention(RetentionPolicy.RUNTIME) 这种策略下,注解可以被JVM运行时加载和访问。通常情况下,可以结合反射来做一些事情。(可以通过反射获取)

      5. java编译过程.java-->.class-->JVM

      import java.lang.annotation.*;
      
      @Retention(RetentionPolicy.RUNTIME)
      public @interface RuntimeAnnotation {
      }
      
      @RuntimeAnnotation
      public class C1 {
      }
      
      Class c1 = Class.forName("retentions.C1");
      System.out.println(c1.getAnnotations());//可以通过反射获取
      
    2. @Target:限定目标注解作用于什么位置@Target({ElementType.METHOD,ElementType.FIELD})

      1. ElementType.ANNOTATION_TYPE(注:修饰注解)
      2. ElementType.CONSTRUCTOR
      3. ElementType.FIELD
      4. ElementType.LOCAL_VARIABLE
      5. ElementType.METHOD
      6. ElementType.PACKAGE
      7. ElementType.PARAMETER
      8. ElementType.TYPE(任何类型,即上面的的类型都可以修饰)
    3. @Inherited(继承注解)

      1. 让一个类和它的子类都包含某个注解,一个类的父类使用这个注解时,类的所有子类会有这个注解
      2. 普通的注解没有继承功能
    4. @Documented

      1. 指明这个注解可以被Javadoc工具解析,形成帮助文档

    4. 自定义注解

    注解使用@interface来声明,注解都是扩展至annotation接口,有参数的注解应该赋值

    1. 声明注解
      注解可以包括的类型:8种基本类型(int/short/long/float/double/byte/char/boolean),String,Class,enum,注解类型,由前面类型组成的数组

      成员变量可以使用多种类型,可以设置默认值,也可以不设置默认值

      @Retention(RetentionPolicy.RUNTIME)
      //表示该注解会保留在class文件中
      @Target(ElementType.METHOD)   
      //表示该注解只能用于方法
      public @interface MultipleTest {
          int a() default 0;
          int b() default 0;
      }
      
    2. 可以给JAVA注解赋初值

      @MultipleTest(a=1,b=1)
      public int test1(){}
      @MultipleTest(b=1,a=1)
      public int test2(){}
      
  • 相关阅读:
    时间序列数据库(TSDB)初识与选择(InfluxDB、OpenTSDB、Druid、Elasticsearch对比)
    Prometheus COMPARISON TO ALTERNATIVES
    认真分析mmap:是什么 为什么 怎么用
    Flume学习之路 (二)Flume的Source类型
    Flume学习之路 (一)Flume的基础介绍
    Spark学习之路 (二十一)SparkSQL的开窗函数和DataSet
    Spark学习之路 (二十)SparkSQL的元数据
    CentOS 7的安装
    Spark学习之路 (十九)SparkSQL的自定义函数UDF
    Spark学习之路 (十八)SparkSQL简单使用
  • 原文地址:https://www.cnblogs.com/innndown/p/12392241.html
Copyright © 2011-2022 走看看