Java反射

Java反射
对于程序来说,遵循六大原则,对于开发是非常必要的。而java的反射机制,从某种程度来说,是非常有利于六大原则,有利于程序的开发的,只有利用得当,会减少很多代码,解决很多问题。
Java反射就是在程序运行状态中,对于任意的类,对象都可以这个该类或者是对象的所有的信息。比如:对象的名称,对象的包名,对象的成员变量,对象的方法,对象的注解等等。也可以修改相应的属性的值。
进行反射,有如下步骤:
第一步,获取Class
对于实力来说,使用xxx.getClass()就可以获取Class对象了。如果是包名加类名的话,可以使用Class.forName(package+”.”+className)就可以获取Class对象了。如果是class的话,直接是xxx.class就可以了。获取类的注解getAnnotation(TestAnno.class);通过注解的类型获取注解。getAnnotations();获取所有的注解。获取父类getSuperclass();。获取接口getInterfaces();
第二步,获取成员变量
Class la = TestThread.class;
1、获取成员变量使用
la.getField("fieldName");通过成员名称来获取public字段
la.getFields();获取public所有成员字段
Field[] fi= la.getDeclaredFields();获取所有的字段
la.getDeclaredField("fieldName");通过字段名获取字段
2、获取成员变量的值和设置值
Object obj = la.newInstance();//创建对象
fi[0].setAccessible(true);如果是private或者是protected修饰的话,必须要设置这个为true
fi[0].get(obj);获取值
fi[0].set(obj, "value");设置值
3、获取字段的注解
fi[0].getAnnotation(TestAnno.class);通过注解的类型获取注解
Annotation[] anno = fi[0].getAnnotations();获取所有的注解

第三步获取方法
1、获取方法
la.getMethod("", String.class,String.class);通过方法名和参数获取public方法
la.getMethods();获取public所有方法
Method met = la.getDeclaredMethod("methodName", null);通过方法名和参数获取方法
la.getDeclaredMethods();获取所有的方法
2、调用方法和获取返回类型
met.setAccessible(true);如果方法是private,protected时,要设置这个为true
met.invoke(obj, null);调用方法
met.getReturnType();获取方法的返回值
3、获取注解
met.getAnnotation(TestAnno.class);通过注解类型获取注解
met.getAnnotations();获取所有的注解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章