A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 代文娟 中级黑马   /  2013-11-18 18:15  /  1284 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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"})
复制代码
这是张孝祥老师的视频讲的,请大家帮我解释一下这三句话是什么意思,我不太明白,希望大家给个比较详细的解释。

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 问题对你来说太水,木有分分加~.

查看全部评分

4 个回复

倒序浏览
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()方法

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!很仔细!

查看全部评分

回复 使用道具 举报
楼上正解.
回复 使用道具 举报
//获取类名   
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"})
回复 使用道具 举报
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 对象表示的底层方法。

评分

参与人数 1技术分 +1 收起 理由
To + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马