黑马程序员技术交流社区
标题:
关于路径的问题
[打印本页]
作者:
张 涛
时间:
2012-9-10 18:16
标题:
关于路径的问题
本帖最后由 张 涛 于 2012-9-23 07:20 编辑
我的代码:
package Reflection;
import java.lang.reflect.*;
public class ReflectionTest {
public static void main(String[] args) throws Exception {
//名字由执行时的参数传入,在runConfiger里设置;传入后字符串就在args[0]里
//第一步,由名字得到字节码
Class c = Class.forName(args[0]);
//第二步,由字节码获得main方法。第一个参数是方法名字,后面是可变参数,类型是Class
Method m = c.getMethod("main", String[].class);
//第三步,执行
m.invoke(null, new String[]{"1","2","3"});
}
}
复制代码
另一个类:
package Reflection;
public class ReflectPrint {
public static void main(String[] args) {
for(String s : args){
System.out.println(s);
}
}
}
复制代码
这是张老师视频里讲过的反射调用另一个类的main方法。第一个类里用反射机制调用第二个类的main方法,第二个类的main方法就是打印传入的参数值,这里在调用时传入的1,2,3.
执行第一个类时,要传入第二个类的名字,因为是在eclipse中,所以在runConfigeration中设置,设置的路径的地方已经用红笔标出。路径我写了三种,但都不对,错误是找不到Class。
三种分别是:D:\workspace\HeiMa\src\Reflection\ReflectPrint.java;
Reflection\ReflectPrint.java;
ReflectPrint.java
都不对。
下面我把我的工程目录和设置参数的图片加在下面,高手给讲下路径的问题。
1.这里应该是相对路径,那么父路径是什么?
2.张老师还说classpaht的相对路径,是指什么?
a.png
(19.92 KB, 下载次数: 20)
下载附件
2012-9-10 18:19 上传
设置参数
b.png
(9.9 KB, 下载次数: 43)
下载附件
2012-9-10 18:19 上传
工程目录
作者:
孙沛
时间:
2012-9-10 18:37
稍等哈哈!!
作者:
王红潮
时间:
2012-9-10 18:40
本帖最后由 王红潮 于 2012-9-10 18:41 编辑
我运行试了一下,有一下几个错误
public class ReflectionTest {
public static void main(String[] args) throws Exception {
//名字由执行时的参数传入,在runConfiger里设置;传入后字符串就在args[0]里
//第一步,由名字得到字节码
Class c = Class.forName(args[0]);
//第二步,由字节码获得main方法。第一个参数是方法名字,后面是可变参数,类型是Class
Method m = c.getMethod("main", String[].class);
//第三步,执行
m.invoke(
c.newInstance(),
(Object)new String[]{"1","2","3"}
);
}
}
首先invoke这里必须传入是哪个对象,而且数组传过去必须要封装要么前面加(Object)String[]{"1","2"}告诉编译器传进去的是个对象,要么用Object数组封装 new Object[]{new String[]{"1","2"}}
传入的路径用相对路径就可以 ,即 包名称. 类名称即可 Reflection.ReflectPrint
作者:
张 涛
时间:
2012-9-10 20:30
我调用的是另一个类的main方法,静态的,所以invoke的第一个参数写null就可以
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2