student对象
package MaReflection;
public class Student {
private int num;
private String name;
static {
System.out.println("[运行静态区块]");
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void talk(String dd) {
System.out.println("学生说话了");
System.out.println(dd);
}
@Override
public String toString() {
return "Student [num=" + num + ", name=" + name + "]";
}
}
主类
package MaReflection;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MaRelectionStudent {
public static void main(String[] args) throws Exception{
updateStudent("MaReflection.Student", "name", "num", "talk");
}
public static void updateStudent(String className,String namefield,String numfiled,String methodname) throws NoSuchMethodException, SecurityException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException, IllegalArgumentException, InvocationTargetException {
Class clazz = Class.forName(className);
Object o = clazz.newInstance();
System.out.println(o.toString());
Field field_name = clazz.getDeclaredField(namefield);
field_name.setAccessible(true);//这个是修改对象属性必须设置的,不然set属性会报错,因为这个对象属性为private
field_name.set(o, "张三");
Field field_num = clazz.getDeclaredField(numfiled);
field_num.setAccessible(true);
field_num.setInt(o, 1);
Method method = clazz.getDeclaredMethod(methodname,String.class);//methodname是方法名 String.class这个是传入参数方法类型
method.setAccessible(true);
System.out.println("method.getName()++++"+method.getName());
System.out.println("method.getParameterTypes()+++"+method.getParameterTypes());
System.out.println(o.toString());
System.out.println("+++++++++++++++");
Object fObject=method.invoke(o,"我就是方法的参数");
System.out.println(fObject);
}
}
运行结果:
[运行静态区块]
Student [num=0, name=null]
method.getName()++++talk
method.getParameterTypes()+++[Ljava.lang.Class;@6d06d69c
Student [num=1, name=张三]
+++++++++++++++
学生说话了
我就是方法的参数
null
利用java反射可以对,对象的私有属性和方法就行调用和动态修改。