自定义注解基础

MyAnno注解

/*
    自定义注解
        格式:
            元注解
            public @interface 注解名称{
                属性列表;
            }
        本质:注解本质上就是一个接口,该接口默认继承Annotation接口
            public interface MyAnno extends java.lang.annotation.Annotation {}
        属性:接口中的抽象方法
            要求:
                1.属性的返回值类型有以下取值
                    基本数据类型
                    String
                    枚举
                    注解
                    以上类型的数组
                2.定义了属性,在使用时需要给属性赋值
                    1.如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
                    2.如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
                    3.数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}省略。
        元注解:用于描述注解的注解
            @Target:描述注解能够作用的位置
            @Retention:描述注解被保留的阶段:source,class,runtime
            @Documented:描述注解是否被抽取到api文档中:javadoc时是否被抽取
            @Inherited:描述注解是否被子类继承

 */
public @interface MyAnno {
    int value();
    String name() default "张三";
    MyAnno2 anno2();
    String[] strs();
}

MyAnn02注解

public @interface MyAnno2 {
    int value();
}

MyAnno3注解

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

/*
    元注解:用于描述注解的注解
            @Target:描述注解能够作用的位置
                ElementType[] value();枚举类数组
                    TYPE:可以作用于类上
                    METHOD:可以作用于方法上
                    FIELD:可以作用于成员变量上
            @Retention:描述注解被保留的阶段:SOURCE,CLASS,RUNTIME
                RetentionPolicy.RUNTIME:最常用,表示MyAnno3注解会被保留到class文件中,并被jvm读取到
                RetentionPolicy.CLASS:表示MyAnno3注解会被保留到class文件中,但不会被jvm读取到
                RetentionPolicy.SOURCE:class文件中也不会被保留
            @Documented:描述注解是否被抽取到api文档中:javadoc时是否被抽取
            @Inherited:描述注解是否被子类继承
 */
@Target(value = {ElementType.TYPE,ElementType.METHOD})//表示MyAnno3注解能作用于类和方法上
@Retention(RetentionPolicy.RUNTIME)//最常用,表示MyAnno3注解会被保留到class文件中,并被jvm读取到
public @interface MyAnno3 {
}

测试类

/*
    测试注解
 */
@MyAnno(value = 1,anno2 = @MyAnno2(2),strs = {"aaa","bbb"})
@MyAnno3
public class AnnoDemo1 {
    @MyAnno2(1)
    public void testMyAnno2(){}

    public String name="aaa";
    @MyAnno3
    public void show(){

    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值