17---java中Annotation02(自定义的)

本文详细介绍了Java Annotation的基本概念、定义方式、参数设置、默认值、枚举取值、保存范围等核心内容,并通过实例展示了如何在类中使用Annotation。重点强调了Retention和RetentionPolicy的作用,以及内建Annotation的特性。
 

1、定义简单的Annotation
 Annotation的定义格式:
  [public] @interface Annotation名称{
   数据类型 变量名称();
  }
 举例子:----接受一个值
  public @interface mySingleParamAnnotation{
    public String value();//接受设置内容---注意属性后面有括号;
   }
  注意:以上必须放到mySingleParamAnnotation.java文件中,
   跟公开的Class一样,文件名与类名必须统一;
   
  @mySingleParamAnnotation(value="lid")
  public class Demo{
    public static void main(String args[]){
      
     }
   }
 举例子:-----接受多个值
  public @interface myMoreParamAnnotation{
    public String key();
    public String value();//接受设置内容---注意属性后面有括号;
    
   }

  @myMoreParamAnnotation(key="yuj",value="lid")
  public class Demo{
    public static void main(String args[]){
      
     }
 举例子:-----设置一个数组
  public @interface myArrayParamAnnotation{
      public String[] value();//接受设置内容---注意属性后面有括号;
      
     }

  @myArrayParamAnnotation(value={"lid","yuj"})
  public class Demo{
    public static void main(String args[]){
      
     }
 以上定义的Annotation中有一个特点,所有的参数内容需要在使用注释的时候设置上去,
 那么也可以为一个参数设置默认的内容,在声明的时候使用default即可;

 举例子-----设置默认值
  public @interface myDefaultAnnotationValue{
   public String key() default "lid";//指定好了默认值
   public String value() default "yuj";//指定好了默认值
  }
  下面的应用就不用设置值了
  @myDefaultAnnotationValue
  public class Demo{
    public static void main(String args[]){
      
     }
  但是在操作中,对于一个Annotation而言有时候固定其取值范围,只能取固定
  的几个值,那么这时候也需要从枚举固定取值;
   public enum MyName{//定义枚举类型
    LID,YUJ;
   }
   public @interface myDefaultAnnotationEnum{
     public MyName name() default MyName.LID;//指定默认值
    }
  此时以上的Annotation已经设置好了一个枚举中的内容作为默认值,那么外部
  使用此Annotation的时候也需要从枚举固定取值

   @myDefaultAnnotationEnum(name=MyName.LID)//从固定的枚举中取值
   public class Demo{
     public static void main(String args[]){
       
      }
    }

 Retention和RetentionPolicy: 
  可以使用Retention定义一个Annotation的保存范围,此Annotation的定义如下:
   @Documented
   @Retention(value=RUNTIME)
   @Target(value=ANNOTATION_TYPE);
   public @interface Retention{
    RetentionPolicy value();
   }
  在以上的Retetion定义中存在一个RententionPolicy的变量,
  此变量用于指定Annotation的保存范围,RetentionPolicy包含三种范围;
  SOURCE:此Annotation类型的信息只会保留在程序源文件之中,编译之后不会保存在编译好的
   类文件(.class)之中;
  CLASS:此Annotation类型将保留在程序源文件(.java)和编译后的(.class)文件之中,在使用此类
   的时候,这些Annotation信息将不会被加载到虚拟机(JVM)中,如果一个Annotation声明时
   没指定范围,则默认为此范围;
  RUNTIME:此Annotation类型的信息保留在源文件(.java)、类文件(.class)在执行时也会加载到JVM之中;
 
 在三个范围中RUNTIME最值得关注,他是在执行时起作用;
 使用Rentention指定一个Annotation的范围,范围为RUNTIME;
  import java.lang.annotation.Retention;
  import java.lang.annotation.RetentionPolicy;
  @Retention(value=RetentionPolicy.RUNTIME)//表示此annotation在运行时起作用;
  public @interface myDefaultRetentionAnnotation{
    public String name() default "LID";
   }
 此Annontation可以运行时起作用,而且在以后要讲解反射与Annotation的操作中,也必须使用此范围;

 内建Annotation的RetentionPolicy:
  Override定义采用的是@Retention(value=SOURCE),只能在原文件中出现;
  Deprecated定义采用的是@Retention(value=RUNTIME),可以再执行时出现;
  SuppressWarnings定义采用的是@Retention(value=SOURCE),只能在源文件中出现;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bzuld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值