• Java注解


    1:所有注解都是类
    2:所有注解类都默认是Annotation接口的子类。
    3:定义方式:
           public @interface SomeAnotation{    }
    4:可以注解的位置
         类上
         方法上
         成员变量上。
         返回值上
         参数上
         局部变量

    5、如果定义了一个注解之后,没有说明这个注解可以注解的位置,则这个注解就可以注解在所有位置上

    6:用途

      6.1:在编译时起到限制的作用.  

      6.2:在运行时组反射使用

                  所有类的字节码Class,Method,Field,Constractor都拥有一个方法:

    7、注解的实例化

           永远都不要实例化注解类,因注解是由系统通过反射实例化的。

     1 @Retention(RetentionPolicy.RUNTIME)//指定在运行时存在

    2 @Target(value={ElementType.METHOD})//注解的位置 

    通过@Target定义某个注解可以注解的位置

    Retention,用于定义注解存在的策略

     1 System.err.println("请输入准备被测试的类:");
     2         Scanner sc = new Scanner(System.in);
     3         String clsName = sc.nextLine();//clsName = "cn.itcast.demo.RunTest";
     4         //根据类名获取这个类的字节
     5         Class cls = Class.forName(clsName);
     6         //实例化这个类,调用默认构造方法
     7         Object obj = cls.newInstance();
     8         
     9         //获取这个类中的所有方法
    10         Method[] ms = cls.getDeclaredMethods();//只获取用户定义的方法,private && public
    11         //cls.getMethods();获取这个类所方法,包括从父类中继承的方法
    12         //遍历判断某个方法上是否存在注解
    13         for(Method m:ms){
    14             boolean boo2 = m.isAnnotationPresent(MyTest.class);//false
    15             if(boo2){
    16                 if(m.getModifiers()==Modifier.PRIVATE){
    17                     System.err.println("这个私有的方法:"+m.getName()+",不支持运行...");
    18                     continue;
    19                 }
    20                 //运行这个方法
    21                 m.invoke(obj);
    22             }
    23         }

    1 RunTest run = new RunTest();
    2         Method m1 = run.getClass().getMethod("bbb");
    3         //获取这个方法上的注解的实例
    4         MyTest mt = m1.getAnnotation(MyTest.class);
    5         //获取这个注解上的属性的值
    6         String name = mt.name();
    7         String value = mt.value();
    8         System.err.println(name+","+value);

  • 相关阅读:
    仿新浪首页、主题、详情页,纯html静态页面
    hdoj 4790 Just Random 【数学】
    Codeforces 97B Superset 平面分治
    HDU 1017 A Mathematical Curiosity【看懂题意+穷举法】
    Codeforces Round #221 (Div. 2) D
    一个bug在redmine中的诞生到终结
    hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决这个问题 .
    js前端3des加密 后台java解密
    进程经常使用小知识汇总
    泛型集合的使用
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4165754.html
Copyright © 2020-2023  润新知