黑马程序员技术交流社区

标题: 怎么临时配置完了classpath变量,还能运行javac呢? [打印本页]

作者: dark_horse_xu    时间: 2014-10-2 18:14
标题: 怎么临时配置完了classpath变量,还能运行javac呢?
本帖最后由 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中的工具)结果编译失败找不到符号。为什么呢


红色和蓝色部分求解答

作者: 杨佳名    时间: 2014-10-2 22:37
(1).何时需要使用-classpath:当你要编译或执行的类引用了其它的类,但被引用类的.class文件不在当前目录下时,就需要通过-classpath来引入类
(2).何时需要指定路径:当你要编译的类所在的目录和你执行javac命令的目录不是同一个目录时,就需要指定源文件的路径(CLASSPATH是用来指定.class路径的,不是用来指定.java文件的路径的)


作者: 罗林军    时间: 2014-10-2 23:26
关于楼主的两个问题:
首先楼主要明确一下,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路径下,而在当前目录中,因此编译失败。
作者: wf111sxwf    时间: 2014-10-7 11:28
java环境变量是当前目录下没有你要运行的程序时,系统会去你的path下去寻找这个程序,如果有就运行,没有就报错。而class path是Class文件所在的目录。




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