zoukankan      html  css  js  c++  java
  • java注解(Annotation)的简单介绍

        注解你可以理解为一个特殊的类,或者接口其自定义个格式形如

    public @interface 注解名(){

    //注解的属性,特别提醒当注解的属性为value时,在对其赋值时,可以不写value,而直接写上值即可。

    }

    下面一个例子讲述了注解的基本应用:(这个例子中A代表一个注解类,写一个D注解的目的是说明一个注解类中可以有注解这个属性。B代表应用了注解类的类,C代表对应用了注解类的类进行反射操作的类。)

    代码如下://定义一个注解D(D的作用只是为了说明A中可以有一个注解的属性)

    package com.qls.theoryIntroduce2;

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

    @Target({ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface D {
    String[] people() default{"王昭君","西施","阴丽华"};
    }

    //定义一个注解类A

    package com.qls.theoryIntroduce2;

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    /**特别说明当一个类引用一个注解时,(如B类引用A注解时)A注解中没有默认值的元素必须要赋值。
    *
    * 从下面的定义中可以看出A注解中的内容包括:int型带有默认值。
    * int型不带有默认值(在一个类中用了A注解,A必须要给caocao这个元素赋一个值)
    * 数组,以及注解。
    *
    * @author 秦林森
    *
    */

    @Target({ElementType.TYPE,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface A {
    int liubei() default 2;
    int caocao();
    String[] sunquan() default {"1","2","3","4"};
    int[] xiaoqiao();
    D daqiao() default @D;
    }

    //定义一个应用注解的类B

    package com.qls.theoryIntroduce2;
    @A(caocao=1,xiaoqiao={8,9,10})
    public class B {
    }

    //定义一个对应用注解的类进行反射操作的类:

    package com.qls.theoryIntroduce2;

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

    /**
    * A注解的内容全部都取出来(这里需要用到反射)
    * @author 秦林森
    *
    */
    public class C {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    //首选判断B类中是否有A注解:
    System.out.println(B.class.isAnnotationPresent(A.class));
    /**
    * 返回结果为true,说明有,但是在A注解中必须有一个元注解
    * @Retention(RetentionPolicy.RUNTIME)否则,返回结果为false.
    */
    //取出A注解中的值:
    A annot = B.class.getAnnotation(A.class);
    //取出caocao的值
    int caocao = annot.caocao();
    System.out.println("caocao="+caocao);
    //取出daqiao的值
    System.out.println("daqiao的值是:");//newline
    for(String str:annot.daqiao().people()){
    System.out.print(str+" ");
    }
    System.out.println();
    //取出liubei
    int liubei = annot.liubei();
    System.out.println("liubei="+liubei);
    //取出xiaoqiao的值
    System.out.println("xiaoqiao的值是:");
    for(int xiaoqiao:annot.xiaoqiao()){
    System.out.print(xiaoqiao+" ");
    }
    //取出孙权的值是:
    System.out.println();
    System.out.println("sunquan的值是:");
    for(String sunquan:annot.sunquan()){
    System.out.print(sunquan+" ");
    }
    }
    }/*Output:
    true
    caocao=1
    daqiao的值是:
    王昭君 西施 阴丽华
    liubei=2
    xiaoqiao的值是:
    8 9 10
    sunquan的值是:
    1 2 3 4 *///:~

  • 相关阅读:
    使用 HtmlInputHidden 控件在本页面保持状态和跨页面传值
    asp.net页面回传与js调用服务端事件、PostBack的原理详解
    关于.net委托的一篇妙文
    C# 基础25问
    存储过程分页
    C#中的格式化字符串
    大批量数据的插入之终极性能提升SqlBulkCopy
    统计某个字符串中指定字符串出现的次数
    powerdesigner 15打开pdm文件弹出安装打印机窗口的解决方法
    Convert.ToInt32(),Int.Parse(),Int.TryParse()的区别
  • 原文地址:https://www.cnblogs.com/1540340840qls/p/6125105.html
Copyright © 2011-2022 走看看