java中的反射,知道类名创建类,还可以设置私有属性的值
刚刚学到了反射,感觉反射的功能好强大,所以想写篇博客记录下自己的学习成果。
利用反射来创建对象。
Class c1=Class.forName("test.Person");//通过类名来创建类,这里test.person只是一个类名,。这个person类代码在//本文最下方 /** *情况1:调用无参的构造方法来创建对象 */ Person p=c1.newInstance();//这样就创建好了 /** *情况2:调用有参构造方法 */ Constructor cs=c1.getConstructor(String.class,int.class);//括号里面写的是构造方法的参数类型的类化,也就是后面加.class就好了 Person p=(Person) cs.newInstance("张三",22);//调用构造方法生成对象
利用反射来设置私有属性
try { Class clazz=Class.forName("testPerson"); Person p=(Person) clazz.newInstance(); Field f1=clazz.getDeclaredField("name"); f1.setAccessible(true);//设置是否可以操作私有属性 f1.set(p, "wfadf"); System.out.println(f1.get(p)); } catch (Exception e) { // TODO Auto-generated catch block throw new RuntimeException(e); }
Person类代码
package test; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } /* public void setName(String name) { this.name = name; }*/ public int getAge() { return age; } public void setAge(int age) { this.age = age; } }