java中的反射,知道類名建立類,還可以設定私人屬性的值,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);//調用構造方法產生對象View Code
利用反射來設定私人屬性
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; }}