
这两个invoke有什么关系吗,不创建Class实例为什么也可以.invoke()调用方法
你得进入Method类中了解invoke()方法的实现逻辑,我简单说一下Method.invoke()的反射实现逻辑:
- Method.invoke()实际上并不是自己实现的反射调用逻辑,而是委托给sun.reflect.MethodAccessor来处理;
- 每个实际的Java方法只有一个对应的Method对象作为root,这个root是不会暴露给用户的,而是每次在通过反射获取Method对象时新创建Method对象把root包装起来再给用户。
- 在第一次调用一个实际Java方法对应得Method对象的invoke()方法之前,实现调用逻辑的MethodAccessor对象还没创建;等第一次调用时才新创建MethodAccessor并更新给root,然后调用MethodAccessor.invoke()真正完成反射调用。
1.这两个invoke没有关系,只是方法名称相同而已,就像你有手,我也有手,虽然都叫手,但我的手跟你的手没有关系
2.只要有invoke方法的都可以xxx.invoke调用,不用创建Class实例.就像你用wifi能上网,我用流量也能上网,你问我没有wifi怎么也可以上网一样的道理
反射就是知道类名就可以,拿类里面的属性和方法等