Java知识点总结(反射-通过反射操作类的属性和方法 )

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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,请注明来意。