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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

比如我在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久还是想不通,难受死了

3 个回复

倒序浏览
Path是设置系统用来指定可执行文件的完整路径,即使不在path中设置JDK的路径也可执行JAVA文件。
而classpath就是告诉编译器该到哪里去找到这个类。
回复 使用道具 举报
可以解释的更详细点吗?
回复 使用道具 举报
今天又闲着无聊.自己配置了一下javapath环境变量,路径在D盘,然后在C盘编译在D盘路径的HelloWorld.java,结果编译不了,说明了配置javapath与不配置没任何区别,这点;也说明了classpath与javapath还是不同的,我理解的是系统在编译.java文件的时候,也是默认了在当前路径下寻找.java路径.(而且配置javapath后并不会去javapath的路径去找java文件.)
而配置了classpath后,在运行.class文件的时候,系统不会再默认当前路径下找.class文件.而是去classpath指定的路径下寻找.class文件.

背后的逻辑非常奇怪.这与我之前的想法是有区别的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马