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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 dark_horse_xu 于 2014-10-14 20:50 编辑

怎么临时配置完了classpath变量,还能运行javac呢?怎么不提示找不到文件呢
例如 当前目录:D:\myclass   set  classpath = C:\
使用javac 123.java(存在于D:\myclass的一个文件)
编译通过了,可是他不是先去classpath环境变量中去找嘛?结果C:\盘没有这个文,定义环境变量时也没让他到本目录下查找啊!为什么不提示找不到文件呢???
紧接着我执行另外一个文件  javac 456.java   (他用到了123.class中的工具)结果编译失败找不到符号。为什么呢


红色和蓝色部分求解答

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 加油!

查看全部评分

3 个回复

正序浏览
java环境变量是当前目录下没有你要运行的程序时,系统会去你的path下去寻找这个程序,如果有就运行,没有就报错。而class path是Class文件所在的目录。
回复 使用道具 举报
关于楼主的两个问题:
首先楼主要明确一下,classpath的环境变量指定的是.class文件所在的目录,path路径配置的是javac.exe和java.exes所在的目录。而编译的时候,如果.java文件当中没有涉及到其他类,那么系统会按照path路径去找java.exe并在当前目录查找.java文件,如果都找到的话,就能够编译。
因此关于楼主的第一个问题,为什么123.java能够编译通过就能够解释了,因为此时,系统只会去path路径下找javac.exe文件和当前目录下的123.java文件,楼主设置的classpath路径在没用到其他.class文件的编译时是不影响的。
关于楼主的第二个问题,为什么javac 456.java编译会失败,是因为在执行 javac 456.java时要用到123.class文件,因此需要去classpath路径里面去找,但是楼主之前编译的123.class文件不存在于classpath路径下,而在当前目录中,因此编译失败。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
(1).何时需要使用-classpath:当你要编译或执行的类引用了其它的类,但被引用类的.class文件不在当前目录下时,就需要通过-classpath来引入类
(2).何时需要指定路径:当你要编译的类所在的目录和你执行javac命令的目录不是同一个目录时,就需要指定源文件的路径(CLASSPATH是用来指定.class路径的,不是用来指定.java文件的路径的)

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马