这里我们先创建两个类 Demo 和 test 在test里我已经写好了无参构造 在Demo里我已经写好了主方法
接下来在主方法中获取test类的字节码文件对象 然后通过查询API得知:
这四个方法是与构造方法有关的
有没有getConstructor和getDeclaredConstructor的区别在于有Declared能获取到非公共的即无public修饰的构造方法
接下来我会使用getDeclaredConstructor() ps:反正带Declared的都能获取到 何乐而不为呢?(啪)
接下来在主方法中写上 - Constructor cs = c.getDeclaredConstructor();
复制代码getDeclaredConstructor的参数是Class类实例。也就是构造函数中参数所对应的Class对象,因为是无参的,所以这里空就可以了。 Constructor的泛型先不用管它了。
发现有异常了。 不管他先抛出 等会再讲
这样就获取到了test类的无参构造对应的Constructor对象
接下来我们要用到Constructor类下的newInstance方法 参数即为构造函数的参数
这个方法的用途和 new 的用途基本相同
也就是说在这里
cs.newInstance() 与 new test() 是等价的 - test t = (test) cs.newInstance();
复制代码之后我们将获取到的对象直接强转为test就获取到test的对象了
控制台就会输出个hi 证明我们成功通过反射成功调用了test的无参构造并实例化了对应的test对象
|