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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小黑子 中级黑马   /  2014-7-30 20:17  /  2997 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

毕老师讲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了呢?

12 个回复

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

回复 使用道具 举报
黎志勇 发表于 2014-7-30 20:31
set classpath=c:\text;
加个分号就能找到了。
JVM运行程序的时候,会先搜索CLASSPATH路径里面的类,再去 ...

那为什么执行javac,两个文件都能找到?
回复 使用道具 举报
本帖最后由 黎志勇 于 2014-7-30 22:18 编辑
小黑子 发表于 2014-7-30 22:12
那为什么执行javac,两个文件都能找到?

执行javac 靠的是PATH,这个跟Java完全没有关系,遵循的是Windows系统的搜索可执行文件的机制,Windows找可执行文件时,会先在当前目录找,找不到才会找PATH路径的。
回复 使用道具 举报 1 0
还需好好努力呀~
回复 使用道具 举报
黎志勇 发表于 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还是有关系的么?
回复 使用道具 举报
人呐,人呐,寻找大神继续解答呀,我还是不是很明白呀
回复 使用道具 举报
这第久了,都木有人回答呀:'(:'(:'(
我表示真的还不理解为毛这样呀……………………
回复 使用道具 举报
path设置后是能够在任意路径下使用java或者javac,classpath是设置在任意路径下都能直接找到你得目标字节码文件,你设置了classpath反而会很麻烦,你只需要记住设置了path就行了,classpath不要设置。
回复 使用道具 举报
你设置的path环境变量貌似不对吧,设置java那个文件的子目录,是个BIN文件夹 ,复制路径放在原来path里的路径前面,用;隔开,就可以了,在哪个目录就都可以使用java和javac了
回复 使用道具 举报
高远 发表于 2014-8-6 22:37
path设置后是能够在任意路径下使用java或者javac,classpath是设置在任意路径下都能直接找到你得目标字节码 ...

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

这个…………我知道。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马