黑马程序员技术交流社区

标题: 基础中的基础 关于classpath [打印本页]

作者: 打工人    时间: 2012-9-26 21:46
标题: 基础中的基础 关于classpath
本帖最后由 冯海霞 于 2012-9-26 23:07 编辑

配置classpath的时候
set classpath=.;c:\;d:\和set classpath=c:\;d:\;这两这种方法有啥区别?不都是要找当前路径的吗
作者: 打工人    时间: 2012-9-26 21:55
来个人吧
作者: 邓利军    时间: 2012-9-26 22:05
本帖最后由 邓利军 于 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,找完指定盘是否还找其它盘.
如果还不明白,请回复.
作者: 黑马-王康    时间: 2012-9-26 22:07

嗯,耐心等等。

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

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

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







作者: 打工人    时间: 2012-9-26 22:32
邓利军 发表于 2012-9-26 22:05
set classpath=.;c:\;d:\   这句中有一个.  ,他会先找当前盘,如果当前盘在 E 时,就会与你的第二种set class ...

也就是说。。。这两者只有顺序不同的问题呗??别的不同就没了?
作者: 梁志冰    时间: 2012-9-26 22:58
本帖最后由 梁志冰 于 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会在查找指定的路径后,再查找当前路径
作者: 打工人    时间: 2012-9-26 22:59
邓利军 发表于 2012-9-26 22:05
set classpath=.;c:\;d:\   这句中有一个点号"."  ,他会先找当前盘,如果当前盘在 E 时,这时就会与你的第二 ...

谢谢。。。。。。。。。。:)




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