反射
反射获取一个类
准备好类获取Class.forName
通过getDeclar那个方法获取到Constructor 对象
设置Constructor 的可访问setAssiable
访问Constructor 的newInstance方法
package com.syh.reflect.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import com.sun.org.apache.xml.internal.security.Init;
public class CreatObject {
public static Object creatObject(){
Object obj=null;
try {
//准备好类
String className="com.syh.reflect.test.CreatObject";
//通过Class.forName获取到类
Class claz=Class.forName(className);
Class []paramClaz={Init.class,String.class,String.class,String.class};
//通过getDeclaredConstructor获取到Constructor 对象
Constructor cc=claz.getDeclaredConstructor(paramClaz);
//设置Constructor 对象可访问
cc.setAccessible(true);
//参数设置后 Constructor 对象的newInstance方法
Object []paramObjs={10,"电脑","北京海淀区","男"};
obj=cc.newInstance(paramObjs);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException 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();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
通过Class上面的实例方法
public Field[] getFields()
返回一个包含某些Field对象的数组,这些对象反映此Class对象所表示的类或接口的所有可访问公共字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果类或接口没有可访问的公共字段,或者表示一个数组类、一个基本类型或 void,则此方法返回长度为 0 的数组
getDeclaredFields()
返回Field
getDeclaredField(String name)
返回一个Field对象,该对象反映此Class对象所表示的类或接口的指定已声明字段。
getField(String name)
返回一个Field对象,它反映此Class对象所表示的类或接口的指定公共成员字段。
package com.syh.reflect.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import com.sun.org.apache.xml.internal.security.Init;
public class ReflectTest {
public static void main(String[] args) {
changeFiled();
}
public static void changeFiled(){
try {
Object obj=creatObject();
Class claz=obj.getClass();
Field ageField=claz.getDeclaredField("age");
Field nameField=claz.getDeclaredField("name");
Field addressField=claz.getDeclaredField("address");
Field sexField=claz.getDeclaredField("sex");
ageField.setAccessible(true);
nameField.setAccessible(true);
addressField.setAccessible(true);
sexField.setAccessible(true);
ageField.setInt(obj, 200);
nameField.set(obj,"computer");
addressField.set(obj,"中国");
sexField.set(obj,"女");
int age=ageField.getInt(obj);
String name=(String) nameField.get(obj);
String address=(String) addressField.get(obj);
String sex=(String) sexField.get(obj);
System.out.println(age+","+name+","+address+","+sex);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Object creatObject(){
Object obj=null;
try {
String className="com.syh.reflect.test.CreatObject";
Class claz=Class.forName(className);
Class []paramClaz={Init.class,String.class,String.class,String.class};
Constructor cc=claz.getDeclaredConstructor(paramClaz);
cc.setAccessible(true);
Object []paramObjs={10,"电脑","北京海淀区","男"};
obj=cc.newInstance(paramObjs);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException 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();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}

浙公网安备 33010602011771号