zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    10-18 noip提高组模拟赛(codecomb)T2贪心
    vj1011:记忆化搜索
    vj1010:高精乘+细心模拟
    10-18 noip提高组模拟赛(codecomb)T1倍增[未填]
    CODEFORCES ROUND #273 DIV2
    Unkown2
    2014.first[未填]
    Unknown
    历年noip复赛试题整合
    快速幂(模板)
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4165754.html
Copyright © 2011-2022 走看看