日期:2014-05-20 浏览次数:20794 次
import java.lang.relfect.*; class A { private void test() { System.out.println("this is a private method"); } } public class Test { public static void main(String[] args) throws Throwable { A a = new A(); Class c = A.class; Method m = c.getDeclaredMethod("test", new Class[]{}); //获取方法 m.setAccessible(true); //修改访问权限 m.invoke(a, new Object[]{}); //调用方法 } }
------解决方案--------------------
本地方法调用
------解决方案--------------------
“对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。”
m.invoke(a,new Object[]{}),表示唤醒 a 对应的类实例中 的 m 方法, 其参数为 Object[]{}
楼主要深究反射的话, 建议多看看java类加载机制,jvm运行的一些原理等等,应该很有帮助。