Java 注解

Java 注解,第1张

Java 注解 Annotation 注解 基础
  • 注解:放在Java源代码的类、方法、字段、参数前的一种特殊"注释";给计算看的。

  • 从JVM的角度看,注解本身可以被编译器打包进入class文件,因此注解是"元数据"。可通过反射机制访问。

  • 反编译看代码的本质:注解本质上是一个接口,该接口默认继承Annotation

    public interface MyAnno extends java.lang.annotation.Annotation{}
    
  • 作用分类:

    • 编写文档:通过代码里的标识的元数据 生成文档【生成doc文档】
    • 代码分析:通过代码里的标识的元数据 对代码进行分析【使用反射】
    • 编译检查:通过代码里的标识的元数据 让编译器能够实现基本的编译检查【override】
自定义注解
  • 方法名称就是参数名称;
  • 返回值类型就是参数的类型;
  • default声明参数默认值;
  • 如果只有一个参数,一般参数名为value,使用是可省略参数只写值;
  • 注解元素必须有值;

实例

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Interf {
    int type() default 0;
    int id() default -1;		// -1,代表不存在
    String value() default "info";
    String[] arr() default {"a","b"};
}

// 使用
@Interf(id = 1, type = 2, arr = {"c","d"})
public class Test01(){
}
元注解
  • 元注解:负责注解其它注解,Java提供4个meta-annotation类型,用于注解annotation类型;

    • @Target:描述注解使用的范围
    • @Retention:描述注解的生命周期(SOURCE 源代码 < CLASS < RUNTIME)
    • @document:该注解将包含在javadoc中
    • @Inherited:子类可以继承父类中的该注解
  • 支持在java.lang.annotation包中;

  • 源码分析

    • @Target

      // Target 需要一个参数ElementType[]
      @documented
      @Retention(RetentionPolicy.RUNTIME)
      @Target(ElementType.ANNOTATION_TYPE)
      public @interface Target {
          
          ElementType[] value();
      }
      
      public enum ElementType {
          
          TYPE,
      
          
          FIELD,
      
          
          METHOD,
      
          
          PARAMETER,
      
          
          CONSTRUCTOR,	// 构造器
      
          
          LOCAL_VARIABLE,
      
          
          ANNOTATION_TYPE,
      
          
          PACKAGE,
      
          
          TYPE_PARAMETER,
      
          
          TYPE_USE,
      
          
          MODULE
      }
      
    • @Retention

      @documented
      @Retention(RetentionPolicy.RUNTIME)
      @Target(ElementType.ANNOTATION_TYPE)
      public @interface Retention {
          
          RetentionPolicy value();
      }
      
      public enum RetentionPolicy {
          
          SOURCE,
      
          
          CLASS,
      
          
          RUNTIME
      }
      
    • @document

      @documented
      @Retention(RetentionPolicy.RUNTIME)
      @Target(ElementType.ANNOTATION_TYPE)
      public @interface documented {
      }
      
    • @Inherited

      @documented
      @Retention(RetentionPolicy.RUNTIME)
      @Target(ElementType.ANNOTATION_TYPE)
      public @interface Inherited {
      }
      
JDK 内置注解

包:java.lang.

@Override:检测被该注解标注的方法是否继承自父类(接口)的;
@Deprecated:该注解标注的内容,表示已过时,或有更好的方法;
@SuppressWarnings:压制警告
@SuppressWarnings("all")
@SuppressWarnings(valu={"uncheched","deprecation"})
javadoc 注解
  • @author 作者名
  • @version 版本号
  • @since 指明需要最早使用的jdk版本
  • @param 参数名
  • @return 返回值情况
  • @throws 异常抛出情况
					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5660678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存