java 注解基础

##注解
   # jdk中预定的注解:
        1.@Override
            检测被注解标注的方法是否是继承自父类(接口)的
        2.@Deprecated
            该注解标注的内容,表示已经过时
        3.@SuppressWarnings
            压制警告,一般传递参数all, 比如@SuppressWarnings("all")
   # 自定义注解:
         1.格式:
            元注解
            public @interface 注解名称{}
         2.本质:注解本质就是一个接口,该接口默认继承Annotation类
            可以通过javap反编译看到它的本质
         3.属性:接口中可以定义的成员方法
                1.返回值类型:
                    * 基本数据类型
                    * String
                    * 枚举
                    * 注解
                    * 以上类型的数组
                2.定义了属性,那么在使用该注解时需要给注解赋值
                  比如public @interface MyAnno{String show();}
                  使用时:@MyAnno(show="myanno")
                          public class Test{}
                   由给注解赋值的样式可以理解为注解里的方法为一个“属性”,所以在给注解添加属性的时候应该取一个属性的样式,而不是方法的名字,这样赋值的时候看起来更加直观

                   但是一个注解中可以有多个属性,但是并不想都给它赋值,那么可以给属性设置一个default,即设置了default的属性可以不进行赋值
                   比如public @interface MyAnno{String name() default "张三";int age();}
                   使用时:@MyAnno(age=18,name="李四")        或者:  @MyAnno(age=18)
                           public class Test{}                       public class Test{}
                   注意:当属性只有一个的时候并且属性名为value的时候,给注解赋值的时候可以只写要赋的值
                        比如 public @interface MyAnno{String value();}
                        使用时@MyAnno("李四")             或    @MyAnno(value="李四")
                              public class Test{}              public class Test{}
                    对数组类型的属性进行赋值的时候,使用{}包裹起来,但是如果只有一个值的时候,{}可以省略
                3.元注解:用于描述注解的注解
                    * @Target 描述注解能够作用的位置 比如:@Target(value={ElementType.TYPE,ElementType.FIELD}) 或@Target(ElementType.TYPE)
                        ElementType.TYPE 可以作用在类上
                        ElementType.FIELD 可以作用在方法上
                        ElementType.METHOD 可以作用在成员变量上
                    * @Retention 描述注解被保留的阶段
                        RetentionPolicy.CLASS
                        RetentionPolicy.SOURCE
                        RetentionPolicy.RUNTIME
                        一般都写 RetentionPolicy.RUNTIME 当前被描述的注解被保留在字节码文件中,并可以被jvm读取
                    * @Documented 描述注解是否可以被抽到api文档中
                        加了该注解,那么被修饰的注解将可以被抽取到文档中
                    * @Inherited 描述注解是否可以被子类继承
                        加了该注解,那么那么被修饰的注解将可以被子类继承
    #在程序中使用注解:获取注解中定义的属性
        Class.getAnnotation(Class<A> annotationClass);//相当于在内存中生成一个该注解接口的子类实现对象
        Annotation.方法名();//获取注解赋的值

        简单的代码实现https://blog.csdn.net/weixin_42265250/article/details/99838815

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值