Java注解(一)

Java Annotate(一)

jdk环境:1.8

元注解

元注解在java.lang.annotation包下,其注解只能用在注解上

我认为@Target(ElementType.ANNOTATION_TYPE)这样声明为元注解

@Target

Target(目标,目标受众):表面被注释的作用的位置

@Documented
@Retention(RetentionPolicy.RUNTIME)
//Target注解为ANNOTATION_TYPE,及只能声明在注解上
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    //可以看出 Target注解 存在一个属性,且传入属性类型为public enum ElementType 枚举数组
    ElementType[] value();
}
参数值参数含义参数值参数含义
TYPE类、接口(包括注释类型)或枚举声明FIELD成员变量(包括枚举常量)
METHOD方法声明PARAMETER正式的参数声明
CONSTRUCTOR构造器声明LOCAL_VARIABLE局部变量声明
ANNOTATION_TYPE注解类型声明PACKAGE包声明
TYPE_PARAMETER类型参数声明TYPE_USEUse of a type
空参数
//仅用于作为复杂注释类型声明中的成员类型。 它不能被用来直接注释任何东西
@Target({})
public @interface MemberType {
}
单个参数
//用于单个注解类型
@Target(ElementType.ANNOTATION_TYPE)
public @interface MetaAnnotationType {
}
多个参数
//用于以下几个位置
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.FIELD})
public @interface Bogus {
}
@Retention

使用在注解上,表明被注释上的注解将保留多长时间。 如果注释类型声明中没有Retention(保存,保留)注解,则保留策略默认为保留在字节码中

@Documented
//当前注解保留到运行时
@Retention(RetentionPolicy.RUNTIME)
//当前注解只能用在注解中
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
  	//可以看出 Retention注解 存在一个属性,且属性类型为public enum RetentionPolicy 枚举
    RetentionPolicy value();
}
参数值参数含义
SOURCE只存在与源代码中
CLASS存在与源代码中,也保留于class文件中,但运行时不被jvm保留
RUNTIME既保留在源码中,也保留于class文件中,还被jvm保留,及保留到运行时刻
用法
@Retention(RetentionPolicy.RUNTIME)
//或者不填写
public @interface Retention {}
@Documented

Documented(备有证明文件的)指示带有类型的注释将由javadoc记录 ,如果类型声明用文档化后,它的注释成为公共API的一部分

@Documented
//保留到运行时
@Retention(RetentionPolicy.RUNTIME)
//只作用与注解上
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}
idea生成javadoc

比如通过idea来生成javadoc Tools>Generate JavaDoc

在这里插入图片描述

测试Documented注解

测试类

//jdk的过时注解
@Deprecated
public class test {
    @Test
    @Deprecated
    public void test01(){
        System.out.println("invoke test01");
    }
}

Deprecated注解内部

//注释成为api的一部分
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}

org.junit.Test注解内部

//没有标注
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Test {}

生成的javadoc文档

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值