脚本宝典收集整理的这篇文章主要介绍了Java知识点总结(反射-通过反射操作类的属性和方法 ),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
Java知识点总结(反射-通过反射操作类的属性和方法 )
@(Java知识点总结)[Java, 反射]
使用反射操作类的属性和方法:
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class test03 { // 通过反射API调用构造方法,构造对象 public static void getInstance(Class clazz){ Student student; try { student = (Student) clazz.newInstance(); // 其实调用无参构造器 student.setName("张三"); System.out.PRintln(student.getName()); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } try { Constructor c = clazz.getDeclaredConstructor(int.class, String.class);// 调用有参构造器 Student student2 = (Student) c.newInstance(1, "李四"); System.out.println(student2.getName()); } catch (NoSuchMethodException | SecurITyException | InstantiationException | IllegalAccessException | IllegalargumentException | InvocationTargetException e) { e.printStackTrace(); } } // 通过反射API调用普通方法 public static void method(Class clazz) { try { Student student = (Student) clazz.newInstance(); // 获取方法 Method method = clazz.getDeclaredMethod("setName", String.class); // 激活方法 method.invoke(student, "王武"); // student.setName("王武"); System.out.println(student.getName()); } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } } //通过反射API操作属性 public static void field(Class clazz){ try { Student student = (Student) clazz.newInstance(); Field F1 = clazz.getDeclareDField("name"); // name 是private属性,如果不写会:IllegalAccessException f1.setAccessible(true); // 这个私有属性不用做安全检查了,可以直接访问 f1.set(student, "赵六"); Field f2 = clazz.getDeclaredField("sex"); // sex 是public 属性,不用忽略安全检查 f2.set(student, "男"); for (Field f : clazz.getDeclaredFields()) { f.setAccessible(true); System.out.println(f.get(student)); //注意参数是对象名,而不是属性名 } } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException | InstantiationException e) { e.printStackTrace(); } } public static void main(String[] args) { String path = "com.gs.Student"; try { Class clazz = Class.forName(path); //getInstance(clazz); //method(clazz); field(clazz); } catch (Exception e) { e.printStackTrace(); } } }
以上是脚本宝典为你收集整理的Java知识点总结(反射-通过反射操作类的属性和方法 )全部内容,希望文章能够帮你解决Java知识点总结(反射-通过反射操作类的属性和方法 )所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。