黑马程序员技术交流社区

标题: classpath相关问题 [打印本页]

作者: 小黑子    时间: 2014-7-30 20:17
标题: classpath相关问题
毕老师讲Java基础视频 day06-05中讲的,
我在D:\code\java\day06  中有一个 ArrayToolDemo.java文件
   在C:\text  中有一个ArrayTool.class文件
   其中ArrayToolDemo类的运行需要调用ArrayTool类
  set classpath=c:\text
执行如下
D:\code\java\day06 >javac ArrayToolDemo.java
编译通过,再执行
D:\code\java\day06>java ArrayToolDemo
错误: 找不到或无法加载主类 ArrayToolDemo
=============================================
我还是不明白,既然编译时两个文件都能找到,为什么运行时,却找不到ArrayToolDemo了呢?

作者: 黎志勇    时间: 2014-7-30 20:31
set classpath=c:\text;
加个分号就能找到了。
JVM运行程序的时候,会先搜索CLASSPATH路径里面的类,再去找当前文件夹,如果CLASSPATH里面没有添加代表当前文件夹的”.“,最后也没加分号”;“,JVM加载完CLASSPATH的类就完事了,不会再搜索当前目录里面的类。


作者: 小黑子    时间: 2014-7-30 22:12
黎志勇 发表于 2014-7-30 20:31
set classpath=c:\text;
加个分号就能找到了。
JVM运行程序的时候,会先搜索CLASSPATH路径里面的类,再去 ...

那为什么执行javac,两个文件都能找到?
作者: 黎志勇    时间: 2014-7-30 22:15
本帖最后由 黎志勇 于 2014-7-30 22:18 编辑
小黑子 发表于 2014-7-30 22:12
那为什么执行javac,两个文件都能找到?

执行javac 靠的是PATH,这个跟Java完全没有关系,遵循的是Windows系统的搜索可执行文件的机制,Windows找可执行文件时,会先在当前目录找,找不到才会找PATH路径的。
作者: 日光加蓝    时间: 2014-7-30 22:32
还需好好努力呀~
作者: 小黑子    时间: 2014-7-31 08:20
黎志勇 发表于 2014-7-30 22:15
执行javac 靠的是PATH,这个跟Java完全没有关系,遵循的是Windows系统的搜索可执行文件的机制,Windows找 ...

那既然Javac与classpath无关,为什么如果不设置classpath=c:\text
执行  D:\code\java\day06>javac ArrayToolDemo.java
却提示如下:
ArrayToolDemo.java:6: 错误: 找不到符号
                ArrayTool.printArray(arr);
                ^
  符号:   变量 ArrayTool
  位置: 类 ArrayToolDemo
================================
这不是说明Javac的执行与classpath还是有关系的么?
作者: 小黑子    时间: 2014-8-3 17:10
人呐,人呐,寻找大神继续解答呀,我还是不是很明白呀
作者: 小黑子    时间: 2014-8-6 17:48
这第久了,都木有人回答呀:'(:'(:'(
我表示真的还不理解为毛这样呀……………………
作者: 高远    时间: 2014-8-6 22:37
path设置后是能够在任意路径下使用java或者javac,classpath是设置在任意路径下都能直接找到你得目标字节码文件,你设置了classpath反而会很麻烦,你只需要记住设置了path就行了,classpath不要设置。
作者: 高远    时间: 2014-8-6 22:40
你设置的path环境变量貌似不对吧,设置java那个文件的子目录,是个BIN文件夹 ,复制路径放在原来path里的路径前面,用;隔开,就可以了,在哪个目录就都可以使用java和javac了
作者: 小黑子    时间: 2014-8-7 07:06
高远 发表于 2014-8-6 22:37
path设置后是能够在任意路径下使用java或者javac,classpath是设置在任意路径下都能直接找到你得目标字节码 ...

哥哥,现在就是要通过设置classpath来学习他的特点…………
作者: 黑马_java猿    时间: 2014-8-7 09:13
临时classpath:set classpath=自定义新值
永久classpath:我的电脑--属性--高级--环境变量,在环境变量内编辑.

作者: 小黑子    时间: 2014-8-7 10:07
黑马_java猿 发表于 2014-8-7 09:13
临时classpath:set classpath=自定义新值
永久classpath:我的电脑--属性--高级--环境变量,在环境变量内 ...

这个…………我知道。。。。




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