反射
反射获取一个类
准备好类获取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号