黑马程序员技术交流社区

标题: 关于反射的一个小疑惑 [打印本页]

作者: 唐晓    时间: 2013-1-26 16:30
标题: 关于反射的一个小疑惑
本帖最后由 张向辉 于 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"});
作者: 黄锦成    时间: 2013-1-26 16:43
args是一个String[],运行main函数时从传递给main函数的。args[0]就是取出数组中的第一个
作者: 苏克    时间: 2013-1-26 16:46
args[0]; 是你传入的参数,传什么是什么

作者: 刘军亭    时间: 2013-1-26 16:54
反射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"});
作者: 黑马刘向阳    时间: 2013-1-26 16:55
args[0] 是main()方法的参数,main()方法是程序的入口,用java命令运行class文件时,如 java Test argument1 argument2 就向Test的main方法传入了两个参数argument1 argument2,参数间用空格隔开。main方法接收的参数为字符串数组,所以argument1 就是args[0],argument2就是args[1]。

类的完全限定名  应该是包括包名在内的类名




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2