黑马程序员技术交流社区

标题: 有关反射的问题 [打印本页]

作者: 代文娟    时间: 2013-11-18 18:15
标题: 有关反射的问题
  1. String startingClassName=args[0];
  2. Method mainMethod=Class.forName(startingClassName).getMethod("main",String[].class)
  3. 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