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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐晓 中级黑马   /  2013-1-26 16:30  /  1278 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-27 12:03 编辑

反射main方法
String startingClassName = args[0];
Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);//Class.forName(startingClassName)是什么意思?反射不是Class.forName("java.lang.String")这么写的吗?不是应该传的是一个类吗?这里传个args[0]参数是什么意思?
//public static Class<?> forName(String className)
//参数:className - 所需类的完全限定名。  所需类的完全限定名这句话应该怎么理解?
mainMethod.invoke(null, (Object)new String[]{"111","222","333"});

评分

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

查看全部评分

4 个回复

倒序浏览
args是一个String[],运行main函数时从传递给main函数的。args[0]就是取出数组中的第一个
回复 使用道具 举报
args[0]; 是你传入的参数,传什么是什么
回复 使用道具 举报
反射main方法
String startingClassName = args[0];  //这句话是获取运行本类时传进来的main方法里的参数,是数组的第一个参数。从名称上来看应该是一个类的名字
Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);//所以要写成这样Class.forName(startingClassName)这里面就是传进来的
//类名称,好处是我编写程序的时候还不知道你要反射哪个类,这个类名是以后运行的时候传进来的,可以说是动态获取的。
//public static Class<?> forName(String className)
//参数:className - 所需类的完全限定名。  所需类的完全限定名这句话应该怎么理解? 可以理解为类名的全称(包名+类名),如果不在一个包的两个同名的类,在这里只写类名的话,虚拟机就不知道你要调用的是谁了,所以要写完整的名称。
mainMethod.invoke(null, (Object)new String[]{"111","222","333"});

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
args[0] 是main()方法的参数,main()方法是程序的入口,用java命令运行class文件时,如 java Test argument1 argument2 就向Test的main方法传入了两个参数argument1 argument2,参数间用空格隔开。main方法接收的参数为字符串数组,所以argument1 就是args[0],argument2就是args[1]。

类的完全限定名  应该是包括包名在内的类名
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马