首页 > 代码库 > 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=http://www.mamicode.com/{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 && public11         //cls.getMethods();获取这个类所方法,包括从父类中继承的方法12         //遍历判断某个方法上是否存在注解13         for(Method m:ms){14             boolean boo2 = m.isAnnotationPresent(MyTest.class);//false15             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 =http://www.mamicode.com/ mt.value();8         System.err.println(name+","+value);

 

Java注解