标签:style blog http io ar color 使用 sp for
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);
标签:style blog http io ar color 使用 sp for
原文地址:http://www.cnblogs.com/liuwt365/p/4165754.html