黑马程序员技术交流社区

标题: 关于path与classpath [打印本页]

作者: 灵界    时间: 2015-5-29 19:26
标题: 关于path与classpath
本帖最后由 灵界 于 2015-5-29 19:46 编辑

dos在任意目录下运行javac时先找当前目录再找path,而dos中java调用JVM在任意目录下运行类文件时先找classpath再找当前目录,这句话正确与否?麻烦各位指点一二。
作者: fecuznmn    时间: 2015-5-29 19:37
本帖最后由 fecuznmn 于 2015-5-29 19:40 编辑

所答非所问,编辑了



作者: nbcallum    时间: 2015-5-29 19:38
系统先在系统变量的PATH里寻找,如果你用户变量里自定义了一个PATH,随后会在里面寻找
作者: 灵界    时间: 2015-5-29 19:54
nbcallum 发表于 2015-5-29 19:38
系统先在系统变量的PATH里寻找,如果你用户变量里自定义了一个PATH,随后会在里面寻找 ...

那是否意味着毕老师所讲是错的,以下是毕老师PPT原话:
当前执行的程序(指javac.exe)在当前目录下如果不存在,windows系统
会在系统中已有的一个名为path的环境变量指定的目录中(指系统变量)查找。
作者: hzw@ql    时间: 2015-5-29 19:56
dos窗口下运行javac(jdk提供的开发工具),首先是会找当前目录下是否有javac.exe这个工具,如果当前目录中有,就不再去电脑属性中的系统变量中的Path变量中去寻找,这个Path变量时设置的是一些应用程序的路径,所以javac.exe在当前目录中找不到的时候就会去这个Path变量中去查找。我们通过配置Path变量,可以使javac.exe在任何目录下均可以访问到,这样就可以在任何目录下调用javac去编译.java文件了。dos中java调用JVM,可以在任何目录下运行类文件,因为我们已经配置好了Path变量,可以找到java.exe。所以我们会首先通过类路径(classpath)去查找我们要执行的类文件放在哪个路径下,如果在classpath下没找到,且在classpath变量的末尾加了分号,这是虚拟机会再到当前目录下去找类文件,不加是不会去当前目录下查找的。
作者: nbcallum    时间: 2015-5-29 20:01
灵界 发表于 2015-5-29 19:54
那是否意味着毕老师所讲是错的,以下是毕老师PPT原话:
当前执行的程序(指javac.exe)在当前目录下如果不 ...

也可能毕老师说的和我意思一样。。总之绝对是现在系统变量的Path进行寻找的,我试验过,我把新的JDK路径定义在了用户变量,但是系统变量里的JDK路径我没有更新,还是老的,你可以自己试一下,用java -version看下版本就知道了
作者: 灵界    时间: 2015-5-29 20:02
hzw@ql 发表于 2015-5-29 19:56
dos窗口下运行javac(jdk提供的开发工具),首先是会找当前目录下是否有javac.exe这个工具,如果当前目录中有 ...

谢谢解答,我就是有点混,一个是先找当前再找path,一个是先找classpath(加分号)再找当前,怎么才能一下记住
作者: hzw@ql    时间: 2015-5-29 20:17
找jdk先找当前,再找Path,这个是不好记,但是你可以记住classpath,这个是找.class文件的,这个找的过程一般是很严格的,不会首先到当前目录中找,因为如果当前目录下存在一个同名的.class,那就悲剧了,这样的错误很难发现。所以我们设置classpath变量的时候,末尾不加分号,分号就是代表又要在当前目录下查找。在找完前面所有的classpath变量都没有找到所需要的类文件,如果末尾有分号就在当前找,这个classpath变量值的顺序顺序可以得出,先找classpath变量,再找当前路径。这个记住了,然后Path你记住和classpath变量相反即可。
作者: zhousuo28    时间: 2015-5-29 20:47
关于path和classpath也弄不太懂,求高手解答
作者: 灵界    时间: 2015-5-29 20:52
hzw@ql 发表于 2015-5-29 20:17
找jdk先找当前,再找Path,这个是不好记,但是你可以记住classpath,这个是找.class文件的,这个找的过程一 ...

非常感谢~~
作者: 微凉的暮色    时间: 2015-5-29 20:58
:o 这是一个很纠结的问题,我也说不清
作者: 王显军    时间: 2015-5-29 21:12
classpath 尽量别配置,用处不是很大.
作者: 我心依旧0329    时间: 2015-5-29 21:35
对啊,这句话是对的吧.
作者: 许鑫    时间: 2015-5-29 21:37
帅。。。。。。。。。。。。。。。。
作者: zhou330667146    时间: 2015-5-29 23:36
新人报道,热血黑马
作者: 冯春朝    时间: 2015-5-30 00:07
path是系统的  当然是系统优先了
作者: luxinyu    时间: 2015-5-30 00:21
只是简单的环境变量配置。这个其实了解就可以,以后开发基本都是工具开发。这东西就是个运行费环境没必要纠结
作者: forTomorrow    时间: 2015-5-30 09:06
前半句对,后半句错,先查找classpath设置的路径,如果classpath路径中设置了;则会继续在当前目录查找,不设置; 则结束查找




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