package com.test.refelect;
import java.io.ObjectInputStream.GetField;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestRefelect {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("com.test.refelect.People");
// Class clazz = new People().getClass();
// Class clazz = People.class;
People people = (People) clazz.newInstance();
Method method = clazz.getDeclaredMethod("say",null);//得到私有的方法
//需要设置accessible为true否则会抛出
//can not access a member of class com.test.refelect.People with modifiers "private"
// method.setAccessible(true);
// method.invoke(people, null);
//-----------------------------------------------
@SuppressWarnings("unchecked")
// Method method = clazz.getMethod("setName",String.class);//由于setName是公有的方法,所以这里调用getMethod方法
// method.invoke(people,(Object)(new String("小明")));
// System.out.println(people.getName());
// //------------------------------------------------
// method = clazz.getDeclaredMethod("say",null);
// method.setAccessible(true);
// method.invoke(people, null);
// //---------------------------------------------
// Constructor constructor = clazz.getConstructor(String.class,int.class,String[].class);//这里需要传入参数的类型
// //这里需要将所有的参数转换成Object类型
// People people2 = (People) constructor.newInstance(new Object[]{"xiaoming",22,new String[]{"china","shanxi","xi'an"}});
//
// System.out.println(people2.getName()+people2.getAge()+people2.getAddress()[0]+people2.getAddress()[1]+people2.getAddress()[2]);
// //--------------------------------------------
// Field field = clazz.getDeclaredField("testChangeString");
// field.setAccessible(true);
//
// field.set(people,field.get(people).toString().replace('a','b'));
// System.out.println(field.get(people).toString());
//
// //-----------------------------------------------
Field fruitField = clazz.getDeclaredField("fruit");
fruitField.setAccessible(true);
fruitField.set(people,"apple");
System.out.println(fruitField.get(people));
method = clazz.getMethod("setFruit",String.class);
method.invoke(people,"banbanba");
System.out.println(clazz.getMethod("getFruit",null).invoke(people, null));
method = clazz.getDeclaredMethod("say",null);
method.setAccessible(true);
method.invoke(people,null);
//
//
// //--------------------------------------------------------
//
// method = clazz.getDeclaredMethod("test",String.class,int.class);
// method.setAccessible(true);
// method.invoke(people, new Object[]{"testsdf",22});
}
}