黑马程序员技术交流社区

标题: 配置classpath的问题 [打印本页]

作者: hdsjsql    时间: 2013-4-17 22:41
标题: 配置classpath的问题
本帖最后由 hdsjsql 于 2013-4-18 09:33 编辑

将classpath设置为D:\与D:\;具体有什么区别,程序中将TC.class文件放在D盘,貌似看不出问题,求解?
追问 classpath设置为D:;与D:\;具体有什么区别,这时差一个"\"

classpath.png (6.14 KB, 下载次数: 55)

classpath.png

作者: U芽Lady    时间: 2013-4-17 22:51
加入没有配置classpath环境变量,JVM只在当前目录下查找运行类文件
如果配置了classpath,会在变量值目录下需找类文件
值的结尾处加分号:JVM在classpath变量值目录下没有找到类文件,会在当前路径下再查找一下
值的结尾处不加分号:没有在值的目录下找到文件也不会再当前目录下查找,即使当前目录下有,也不会运行
作者: smile_joe    时间: 2013-4-17 22:56
你好,
classpath变量值是java类文件的目录 (class结尾)
如果配置了classpath分两种情况
    1,末尾加分号,先在classpath路径里找,如果找不到就会去当前目录去找,如果还是找不到报找不到或无法加载主类
    2,末尾不加分号,只在classpath路径找,找不到就直接报找不到或无法加载主类

但建议不要设置;  因为操作都是指定性的
作者: 陈宇鹏    时间: 2013-4-18 00:09
将classpath设置为D:\与D:\;具体有什么区别,程序中将TC.class文件放在D盘,貌似看不出问题,求解?
带有“;”和没带“;”的区别就在于
前者会优先在classpath所设定的路径中查找,如果没有,就会在当前所在目录下查找,如果依然没有,就会报错
后者则是只在classpath所在目录下查找,通常情况下,不使用前者那种方式,因为那样子会有隐患,比如某天你在查找某命令,在classpath指定路径下原本有一个和当前路径下名字一样功能不一样的一个命令,这时,classpath指定路径中没有,当查找完成指定路径,回到当前路径下,发现该命令并执行。就会导致你原本要做的事情错误。
作者: yinbolove576    时间: 2013-4-18 07:53
将classpath设置为D:\与D:\;区别在于JVM的一个查找.class文件的执行顺序问题:
如果没有“;”,则虚拟机首先会在指定目录中进行查找对应的.class文件,如果没有,则会在D:\根目录下进行查找相对应的.class文件,如果仍旧没有找对对应文件,JVM就会报错;
而有“;”则只会让JVM在当前目录下查找相对应的.class文件,如果没有该文件,则JVM就会报错;
值得注意一点的就是,建议路径后面还是带“;”,这样做可以防止虚拟机找到其他可能与之对应而非本程序所生成的.class文件造成“牛头不对马嘴”的答案。
作者: 史庆宇    时间: 2013-4-18 10:17
对于这个问题,我自己这样实验的,前提,我在E盘有个Test.class文件,java源文件内容如下:
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println("我在E盘");

  6.         }
  7. }
复制代码
首先,我把classpath指定为d:
DOS切换到E盘运行结果如下:出现找不到或无法加载主类Test

再次,我把classpath指定为d:;,就是在上边环境变量的基础上加了冒号。
还在E盘根目录运行,结果如下:我在E盘。

第三,我把classpath在第一次的基础上加了反斜杠\和分号;,也就是d:\;
同样在E盘跟目录下运行,结果仍未我在E盘。

通过实验,得出结论,环境变量中加分号时,程序会先在classpath指定的目录下寻找,如果没有,再在当前目录下寻找。
对于楼主截图中, ,通过实验,个人认为,带反斜杠和不带反斜杠没差别。
同时,对于楼上的哥们,
如果没有“;”,则虚拟机首先会在指定目录中进行查找对应的.class文件,如果没有,则会在D:\根目录下进行查找相对应的.class文件,如果仍旧没有找对对应文件,JVM就会报错;
可能敲字的时候失误吧,前边都说的如果没有。。 以上只是个人的实验,请大家提出意见。
作者: 黄玉昆    时间: 2013-4-18 20:13
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
作者: hdsjsql    时间: 2013-4-18 20:16
追问 classpath设置为D:;与D:\;具体有什么区别,这时差一个"\"
求解答




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