黑马程序员技术交流社区

标题: classpath 作用是什么, [打印本页]

作者: 安宁.沉睡    时间: 2014-8-15 07:38
标题: classpath 作用是什么,
本帖最后由 安宁.沉睡 于 2014-8-15 20:34 编辑

为什么定义了一个set calsspath 后不在一个文件夹下的两个调用关系的源文件可以编译,但还是不能运行?
定义一个Tool工具类在Tool文件夹下,定义一个Array主类在Array文件夹下,并在Array主类中调用Tool类的对象。
此时将设置set classpath=Tool文件下  ,     命令路径在Array文件路径下
此时直接编译Array       Tool类和Array类都会被编译
但为什么此时直接运行命令 java Array 却不行

如果将设置set calsspath=.;Tool  的话就可以顺利编译并执行 ,代码逻辑是没错的就是加载路径的问题吧
在路径D:\Tool 下创建Tool.java文件  ,   class Tool{void show(){System.out.println("成功");}}
在路径D:\Array 下创建Array.java文件, class Array{
                                                                            public static void main(String[] args) {
                                                                           Tool tool=new Tool();  tool.show();   }}
在命令符中执行  1. cd D:\Array
                          2. set classpath=D:\Tool
                         3. javac Array.java     //成功编译两文件夹下都生成相应的class文件
                          4.java  Array          //失败  找不到或无法加载到主类 Array
                          5.set classpath=.;D:\Tool
                           6.重新编译,运行都可以



作者: 沿途小将    时间: 2014-8-15 07:50
怎么回事?我也懵了
作者: 思维    时间: 2014-8-15 09:10
设置classpath就是为类加载器AppClassLoader指定默认加载路径,Java应用类都是由这个类加载器去加载的
作者: 菜鸟一号    时间: 2014-8-15 09:19
被编译了证明语法没错,请看看是不是逻辑错误。
作者: 华谦    时间: 2014-8-15 11:13
能被编译,说明java程序可以执行,至于你说不能运行,把运行错误代码发上来看看
作者: nadax    时间: 2014-8-15 11:23
因为你ARRAY类调用TOOL类,编译器就会去找 然后你calsspath刚好有TOOL类,你确定TOOL目录下只有.JAVA没有.class?
作者: fantacyleo    时间: 2014-8-15 11:46
按理说你光指定cp是不可能在Array文件夹下找到Tool文件夹下的源文件的,除非你在Tool文件夹下已存在Tool.class。把你的代码中package和import的那部分以及你调用javac和java的完整命令发上来看看。
作者: 阳光的嘉主角    时间: 2014-8-15 14:52
按照路径找类 classpath 就是给出路径 让类加载器去找类
作者: 安宁.沉睡    时间: 2014-8-15 20:13
菜鸟一号 发表于 2014-8-15 09:19
被编译了证明语法没错,请看看是不是逻辑错误。

不是逻辑问题,应该是加载路径顺序和执行路径顺序不同导致的问题
作者: 安宁.沉睡    时间: 2014-8-15 20:14
阳光的嘉主角 发表于 2014-8-15 14:52
按照路径找类 classpath 就是给出路径 让类加载器去找类

是的所以,可以成功加载,编译,但是却不能运行不知道为什么
作者: 周靖轩    时间: 2014-8-15 20:21
Tool前面是不是要加完整的路径呀,盘符等。。。菜鸟同求解答啊




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