1)、需要获得java类的各个组成部分,首先需要获得类的Class对象,获得Class对象的三种方式: Class.forName(classname) 用于做类加载 obj.getClass() 用于获得对象的类型 类名.class 用于获得指定的类型,传参用 2)、反射类的成员方法: Class clazz = Person.class; Method method = clazz.getMethod(methodName, new Class[]{paramClazz1, paramClazz2}); method.invoke(); 3)、反射类的构造函数: Constructor con = clazz.getConstructor(new Class[]{paramClazz1, paramClazz2,...}) con.newInstance(params...) 4)、反射类的属性: Field field = clazz.getField(fieldName); field.setAccessible(true); field.setObject(value); 获取了字节码文件对象后,最终都需要创建指定类的对象: 创建对象的两种方式(其实就是对象在进行实例化时的初始化方式): 1,调用空参数的构造函数:使用了Class类中的newInstance()方法。 2,调用带参数的构造函数:先要获取指定参数列表的构造函数对象,然后通过该构造函数的对象的newInstance(实际参数) 进行对象的初始化。 综上所述,第二种方式,必须要先明确具体的构造函数的参数类型,不便于扩展。 所以一般情况下,被反射的类,内部通常都会提供一个公有的空参数的构造函数。
|