黑马程序员技术交流社区
标题:
有关反射的问题
[打印本页]
作者:
代文娟
时间:
2013-11-18 18:15
标题:
有关反射的问题
String startingClassName=args[0];
Method mainMethod=Class.forName(startingClassName).getMethod("main",String[].class)
mainMethod.invoke(null,(Object)new String[]{"111","222","333"})
复制代码
这是张孝祥老师的视频讲的,请大家帮我解释一下这三句话是什么意思,我不太明白,希望大家给个比较详细的解释。
作者:
zuiaichiyu
时间:
2013-11-18 18:53
String startingClassName=args[0];
//为主函数添加一个String类型参数,该参数是一个类名, main函数后面是一个数组类型的参数列表。arg[0]是第一个参数
Method mainMethod=Class.forName(startingClassName).getMethod("main",String[].class)
//通过通过类名获取字节码文件,通过反射获得mian()方法,
mainMethod.invoke(null,(Object)new String[]{"111","222","333"})
//Object invoke(Object obj, Object... args)
//对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
//就是说你通过哪个对象调用此方法,并且传入参数
这几句代码通过反射方式执行类中的main()方法
作者:
hurryup
时间:
2013-11-18 20:00
楼上正解.
作者:
@ne_pie尒ce
时间:
2013-11-18 20:44
//获取类名
String startingClassName=args[0];
//通过Class.forName(类名)的方式获得类的字节码
//利用反射获得指定的方法main,同时传入main方法所需的参数对应的字节码
Method mainMethod=Class.forName(startingClassName).getMethod("main",String[].class)
//调用该方法,因为是静态方法,所以传入null对象,,同时传入具体参数对象
mainMethod.invoke(null,(Object)new String[]{"111","222","333"})
作者:
冯国强
时间:
2013-11-19 20:13
String startingClassName=args[0];
这句是定义一个字符串变量startingClassName,将args[0]赋值给变量。
Method mainMethod=Class.forName(startingClassName).getMethod("main",String[].class)
这句是涉及到反射,先得到名为startingClassName类的字节码实例对象,在调用Class类中的获取某个方法,参数main是需要获取的方法名,String【】.class是参数列表的字节码对象。
返回的是Method类,定义一个对象,并获取前面的到的方法。
mainMethod.invoke(null,(Object)new String[]{"111","222","333"})
这句是Method类中的方法invoke:对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2