黑马程序员技术交流社区

标题: 对path与classpath环境变量的理解陷入死胡同了 [打印本页]

作者: Jerry007    时间: 2016-9-13 22:23
标题: 对path与classpath环境变量的理解陷入死胡同了
比如我在D:\develop\Java\jdk1.7.0_72\bin设置了path的环境变量, 然后在C盘创建了一个叫HelloWorld.java的源文件.
我进行了如下操作:
1. 在当前文件夹打开命令窗口
2.编译javac HelloWorld.java (此时编译成功,生成了HelloWorld.class 文件)
3.运行java HelloWorld   (成功运行,输出Hello World!)
但是如果我在D盘设置了classpath环境变量,然后在C盘创建了一个叫Hello.java的源文件时候,
我进行了如下操作:
1. 在当前文件夹打开命令窗口
2.编译javac Hello.java (此时编译成功,生成了Hello.class 文件)
3.运行java Hello   (此时系统报错!)
老师解释说是,因为设置了classpath环境变量,所以运行Hello.class文件的时候,系统运行时会去指定的D盘目录找不到Hello.class,而不是在当前的目录下去找Hello.class文件.


但是我的疑惑是,为什么上面的第一个例子HelloWord.java在进行编译的时候,即编译javac HelloWorld.java ,编译成功了,生成了HelloWorld.class 文件), 但是HelloWord.java文件也不在D:\develop\Java\jdk1.7.0_72\bin目录里面啊.
按照classpath的逻辑, 在编译的时候不应该去到指定的D盘bin目录去找HelloWorld.java文件吗? 找不到按道理应该要报错的啊?

求大神解释,我想了N久还是想不通,难受死了


作者: kangnam    时间: 2016-9-13 22:39
Path是设置系统用来指定可执行文件的完整路径,即使不在path中设置JDK的路径也可执行JAVA文件。
而classpath就是告诉编译器该到哪里去找到这个类。

作者: Jerry007    时间: 2016-9-13 22:42
可以解释的更详细点吗?
作者: Jerry007    时间: 2016-9-15 11:12
今天又闲着无聊.自己配置了一下javapath环境变量,路径在D盘,然后在C盘编译在D盘路径的HelloWorld.java,结果编译不了,说明了配置javapath与不配置没任何区别,这点;也说明了classpath与javapath还是不同的,我理解的是系统在编译.java文件的时候,也是默认了在当前路径下寻找.java路径.(而且配置javapath后并不会去javapath的路径去找java文件.)
而配置了classpath后,在运行.class文件的时候,系统不会再默认当前路径下找.class文件.而是去classpath指定的路径下寻找.class文件.

背后的逻辑非常奇怪.这与我之前的想法是有区别的




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