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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 打工人 金牌黑马   /  2012-9-26 21:46  /  1544 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冯海霞 于 2012-9-26 23:07 编辑

配置classpath的时候
set classpath=.;c:\;d:\和set classpath=c:\;d:\;这两这种方法有啥区别?不都是要找当前路径的吗

点评

记得把贴改为已解决  发表于 2012-9-26 23:06

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 你的光盘已经邮寄出去。

查看全部评分

6 个回复

正序浏览
邓利军 发表于 2012-9-26 22:05
set classpath=.;c:\;d:\   这句中有一个点号"."  ,他会先找当前盘,如果当前盘在 E 时,这时就会与你的第二 ...

谢谢。。。。。。。。。。:)
回复 使用道具 举报
本帖最后由 梁志冰 于 2012-9-26 23:00 编辑

set classpath=.;c:\;d:\和set classpath=c:\;d:\;  
这两种查询方式是有区别的:
A:set classpath=.;c:\;d:\    这样的配置方式是先在当前路径下查找(因为“.”点代表当前路径)字节码(.class)文件;如果没有找到,则会查找C盘目录;如果前面的目录下都没有找到,则会在D盘目录下查找;如果查找完前面指定的路径,还没有找到相应的字节码文件,则报未找到文件的异常。

B: set classpath=c:\;d:\;   这样的配置方式是先再C盘目录下查找字节码(.class)文件;如果没有找到,则会查找D盘目录;如果在C、D盘目录下没有找到字节码文件,则会在当前目录下查找(因为在结尾处加了“;”分号);如果查找完前面指定的路径,还没有找到相应的字节码文件,则报未找到文件的异常。

通过上面的查找顺序分析,我们得出以下结论:
(1)JVM会先在classpath环境变量值的目录中查找要运行的字节码文件,。即使当前目录下有相应的字节码文件,也会先找classpath中配置的目录
(2)配置classpath路径时,查找顺序是从左往右开始查找的。所以我们如果是想执行当前目录下字节码文件,建议使用A方式进行配置,避免其他路径下有同名的字节码文件,导致运行出错。
(3)建议不要在路径结尾处加";"(分号),因为这样JVM会在查找指定的路径后,再查找当前路径

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 淡定

查看全部评分

回复 使用道具 举报
邓利军 发表于 2012-9-26 22:05
set classpath=.;c:\;d:\   这句中有一个.  ,他会先找当前盘,如果当前盘在 E 时,就会与你的第二种set class ...

也就是说。。。这两者只有顺序不同的问题呗??别的不同就没了?

点评

回答已重新编辑, 有两个区别.  发表于 2012-9-26 22:47
回复 使用道具 举报

嗯,耐心等等。

1)你首先要明白加分号的作用。
作用:虚拟机现在制定制定的classpath目录下找运行Java程序,然后再到当前目录下找程序。
比如你写的:set classpath=c:\;d:\;  (分号是程序一部分不是标点符)

2)再者你要明白,查找环境变量的方式是顺序查找,也就是从左向右查找。
set classpath=.;c:\;d:\       和            set classpath=c:\;d:\;
两者的查找顺序本身就不同。

呵呵,希望对你有帮助。在看看视频吧,这些毕老师有讲哦。






点评

请查看论坛技术分相关规定,在资料中写上真实姓名,实名才方便进行入学考核. 所以要实名才能得技术分哦.  发表于 2012-9-26 23:08
回复 使用道具 举报
本帖最后由 邓利军 于 2012-9-26 22:49 编辑

set classpath=.;c:\;d:\   这句中有一个点号"."  ,他会先找当前盘,如果当前盘在 E 时,这时就会与你的第二种set classpath=c:\;d:\;有区别了...就会执行 E盘,E盘没有就找c盘,C盘没有再找D盘,D盘没有就找了.
set classpath=c:\;d:\;   这句呢,无论当前盘在哪里,他只会先找C盘,C盘没有,就找D盘,因为这句有个分号";",,,这分号的意思是::::::::d盘没有它还会找其它盘的.   
PS:在以后开发中,一般不加分号,因为电脑中同一类名文件可能会很多,一般执行时都会指定文件执行,所以当指定文件有问题时,它会执行其它非指定文件,这样就会得出不是自己要的结果.

所以,这两句有两区别:1,是否先找当前盘.2,找完指定盘是否还找其它盘.
如果还不明白,请回复.

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

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