反射:
加载类,获得类的字节码有三种方式:
1.Class.forName("包名.类名");
2.new
3.类名.class;
Class clazz = Class.forName("com.tanghaibin.reflex.Person");
Constructor [] constructor = clazz.getConstructors();//获取Perosn类中的所有构造器,其顺序是按照参数个数来排序的
Person person = (Person) constructor[0].newInstance();//使用无参构造器来创建person对象
Person person2 = (Person)constructor[1].newInstance("simple",22);//使用有参构造器来创建person对象
反射出公共的构造函数的方法:getConstructor;
创建此对象所表示的类的新实例:newInstance
反射出私有的构造函数的方法:getDeclaredConstructor
如果要new出实例,则需要暴力反射:setAccessible(true)
反射出共有构造函数案例:import org.junit.Test;
public class test2 {
}
反射出私有构造函数案例:
import org.junit.Test;
public class test2 {
}
反射类的方法:
反射出公有方法:getMethod
运行方法:invoke(类对象,参数)
反射出私有的方法:getDeclaredMehod
要调用私有方法;需要暴力反射:setAccessible(true)
反射获得方法的参数的类型:getParameterTypes
反射获得方法的权限:getModifiers()
反射获得属性:getDeclaredFileds
反射出main方法
getMethod("main",String [].class);
运行main方法有两种:
第一种:invoke(null,(Object)new String[]{字符串});
第二种:invoke(null,new Object[](new String[]{字符串}));