Student类:
//使用反射获取如下类中的属性以及方法,并给属性赋值为:"李四",并调用其中的eat方法打印结果为:李四在吃苹果
//
// public class Student{
//
// private Student(){}
// private String name;
//
// private void eat(String food){
// System.out.print(name+"吃"+food);
// }
//
//
// }
package com.n4;
public class Student {
private Student() {
}
private String name;
private void eat(String food) {
System.out.println(name + "吃" + food);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(String name) {
super();
this.name = name;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Test类
package com.n4;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args)
throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, InstantiationException, NoSuchFieldException {
// TODO Auto-generated method stub
// Class<?> clazz=Class.forName("com.n4.Student");
// Method method=clazz.getDeclaredMethod("",String.class);
// method.setAccessible(true);
// System.out.println(method.toGenericString());
// Object object=method.invoke(clazz.newInstance(), "王震宇");
// System.out.println(object);
// Class clazz=Class.forName("com.n4.Student");
// Object stu=clazz.newInstance();
//
// java.lang.reflect.Field f=clazz.getField("name");
//
//
// f.set(stu,"桂贤松");
// f.setAccessible(true);
//
// Object name=f.get(stu);
//
// System.out.println(name);
// //获取学生类的字节码对象
// Class class1=Class.forName("com.n4.Student");
// //获取学生类对象
// Object stuObject=class1.newInstance();
//
// //获取无参有返回值的方法
// Method method=class1.getMethod("setName");
// Object object=method.invoke(stuObject);
// System.out.println(object);
// //获取字节码对象
// Class class1=Class.forName("com.n4.Student");
// //创建学生对象
// Object stuObject=class1.newInstance();
// //暴力反射获取方法
// Method method=class1.getDeclaredMethod("setName");
// //让jvm不检查权限
// method.setAccessible(true);
// //执行方法
// method.invoke(stuObject, "哈哈哈哈");
Class<Student> class1 = Student.class;
Constructor c = class1.getDeclaredConstructor();
c.setAccessible(true);
Student student = (Student) c.newInstance();
java.lang.reflect.Field m = class1.getDeclaredField("name");
m.setAccessible(true);
m.set(student, "张三 ");
Method method = class1.getDeclaredMethod("eat", String.class);
method.setAccessible(true);
method.invoke(student, "苹果");
}
}