定义基本注解

本文介绍了Java注解中的@Target和@Retention两个关键元注解的用法。@Target用于指定自定义注解可以应用的位置,如TYPE、METHOD等;@Retention定义注解的保留策略,包括SOURCE、CLASS和RUNTIME,影响注解在编译后的可见性和作用范围。同时,文章还探讨了注解中定义参数的方法和规则。
摘要由CSDN通过智能技术生成
```java
package reflect.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 在注解上我们可以使用java预定义的注解来规范某些操作,常用的有:
 * @Target 用于指定当前注解可以被应用的位置。
 *         不指定该注解时,我们定义的注解可以被应用于任何可以使用注解的位置,
 *         比如:类上,方法上,构造器上,属性上,参数上等
 *         可以通过为Target注解传入参数来指定可以使用的特定位置,这些位置
 *         都被ElementType规定。
 *         @Target(ElementType.TYPE)
 *         只能在类上使用该注解
 *
 *         @Target({ElementType.TYPE,ElementType.FIELD})
 *         可以在类上或属性上使用该注解(多个位置时要以数组形式表达)
 *
 * @Retention 用于指定当前注解的保留级别,有三个可选值
 *         RetentionPolicy.SOURCE   注解仅保留在源代码中
 *         RetentionPolicy.CLASS    注解保留在字节码中,但是不可被反射机制访问(默认保留级别)
 *         RetentionPolicy.RUNTIME  注解保留在字节码中,可被反射机制访问
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface AutoRunClass {
}
```



```java
package reflect.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AutoRunMethod {
    /*
        注解中可以定义参数
        格式为:
        类型 参数名() [default 默认值]
        默认值是可选的,不是必须指定的。如果指定了默认值,那么使用注解时
        可以不传入该参数,此时参数使用这个默认值。
        如果参数没有指定默认值,那么使用注解时必须为这个参数赋值。

        如果注解中只有一个参数时,参数名建议选取"value"。这样外界在使用
        该注解时,传递参数则不需要指定参数名,可以直接写作:
        @AutoRunMethod(5)    此时value的值就是5

        如果该参数名不叫value,比如叫:
        int num() default 1;
        则使用注解时为该参数传递值时必须写作:
        @AutoRunMethod(num=5)

     */
    int value() default 1;

    /*
        一个注解中可以定义多个参数,当使用该注解时传参格式为:name=value
        @AutoRunMethod(num=1,name="张三")
        或
        @AutoRunMethod(name="张三",num=1)    (传参顺序不所谓)

     */
//    int num() default 1;
//    String name();
    /*
        并且两个以上参数(含两个)时,其中某一个参数名指定为value,传参时也
        必须指定该参数名
        例如:
        @AutoRunMethod(value=1,name="张三")
        或
        @AutoRunMethod(name="张三",value=1)
     */
    //    int value() default 1;
    //    String name();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值