直接上代码,有java基础的应该能看懂
2017年12月16日 21:03:33
package cn.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.junit.Test;
import cn.entity.Admin;
/**
* 反射技术
* @author 朱宏梁
*
*/
public class reflect {
@Test
public void test() throws Exception{
String className = "cn.entity.Admin";
//获取字节码文件
Class<?> clazz = Class.forName(className);
//创建对象 :通过默认的简化方法
//Admin a = (Admin) clazz.newInstance(); //Admin.Admin()
//通过构造器
/*Constructor<?> constrs = clazz.getDeclaredConstructor();
constrs.newInstance(); //Admin.Admin()
*/
Constructor<?> construs = clazz.getDeclaredConstructor(String.class);
Admin a= (Admin) construs.newInstance("zhuhongliang"); //Admin.Admin()zhuhongliang
}
//获取方法
@Test
public void testField() throws Exception{
String className = "cn.entity.Admin";
//获取字节码文件
Class<?> clazz = Class.forName(className);
Admin a = (Admin) clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
for(Field fs : fields){
fs.setAccessible(true); //设置强制访问
String name = fs.getName();
Object value = fs.get(a);
System.out.println(name+"="+value);
}
}
//获取方法
@Test
public void testMethod() throws Exception{
String className = "cn.entity.Admin";
//获取字节码文件
Class<?> clazz = Class.forName(className);
Admin admin = (Admin) clazz.newInstance();
//获取方法getId
Method m = clazz.getDeclaredMethod("getId");
Object value = m.invoke(admin);
System.out.println(value);
}
}