反射原理及优缺点:
参考博客:点击打开链接
相关操作代码:
public class ReflectTest { public static void main(String[] args) { try { /*反射机制获取类有3种方法*/ //第一种方式 Class<?> cl1 = Class.forName("ref.Student"); //第二种方式 //java中每个类都有class属性 Class<?> cl2 = Student.class; //第三种方式 //java语言中任何一个java对象都有getClass 方法 Student stu = new Student(); Class<?> cl3 = stu.getClass(); //创建实例 Student student = (Student)cl1.newInstance(); student.setName("张三"); student.setAge(19); test1(student); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void test1(Object obj){ Class<?> cl = obj.getClass(); try { //获取属性 Field[] field = cl.getDeclaredFields(); for(Field fld:field){ fld.setAccessible(true); //设置些属性是可以访问的 if(fld.getName().equals("name")){ fld.set(obj, "李四"); } System.out.print("属性: "+fld.getName()); System.out.print("属性值是:"+fld.get(obj)); System.out.print(" 属性类型的名字是: "+fld.getType().getSimpleName()); System.out.println(" 修饰符: "+Modifier.toString(fld.getModifiers())); } } catch (Exception e) { e.printStackTrace(); } } }