当前位置:编程学习 > JAVA >>

关于JDK6中classpath的问题

    windowsxp,jdk6在设置classpath时必须加“.;”(句点分号)吗?
    我查了一些资料,都说是要加的,“.”代表当前路径,但是我在cmd环境下使用javac和java时,基本上没有遇见因为没有设置“.;”造成的错误,所以我认为windows环境下会自动先搜索当前路径,不用设置“.;”。
    恰恰就有那么两次没设置“.;”,运行时出错了。
    想了很久没弄清什么情况会出错。

    请高手距离说明,是不是classpath中必须要加“.;”;如果要加,什么情况下不加会处错误。
    感谢! --------------------编程问答-------------------- 跟类加载器有关的 有一个AppClassLoader会在classpath上寻找要加载的class,找不到自然报错 --------------------编程问答-------------------- 请1楼举例说清楚。
有的资料中说设置了classpath值后,就不自动搜索当前路径了。这种说法怎么解释。 --------------------编程问答-------------------- 最初设置CLASSPATH是因为java自己需要通过CLASSPATH定位自带的库。后来java不需要这个环境变量了。

java命令本来就不搜索当前路径。

每个java项目的依赖库都不一样。如果你需要同时维护几个使用同一库不同版本的项目,岂不需要不停修改CLASSPATH变量。 --------------------编程问答-------------------- 你如果是在命令行下运行某个类,而且不指定-cp 或-classpath 那么classpath就会起作用,JVM会搜索命令行上下文是否有设置过classpath,如果还没有就会搜索环境变量的classpath值
楼主提的问题就是在环境变量的classpath起作用的,设置上 .作用就是命令行当前所在目录的文件也作为classpath的搜索路径,其实.;后面的分号只是分割各个值而已。
如果你运行程序生成的class文件在当前目录,而没有用-cp -classpath 也没有设置上下文的classpath值,也没有在系统环境变量classpath里面加上.那么JVM是无法找到运行程序的class文件的
比如在D盘javac 生成了 HelloWorld.class,但是没有加上.在环境变量,你在D盘下执行java HelloWorld是不会找到对应的类的,报ClassNotFoundException
最后,如果你用eclipse等编译器是完全不会遇到这个问题的,就是命令行自己编译的时候碰上最多 --------------------编程问答-------------------- 楼上的说“java命令本来就不搜索当前路径。”让我更迷惑,我在设置了classpath但是没有设置".;"的情况下,在cmd中运行当前非classpath指明的目录中的class类,没问题,顺利运行。

又看了论坛里关于classpath是否要设置“.;”的几个贴子,还是没得到结果。

困了,去睡了。明天再来看。

谢谢关注!
--------------------编程问答-------------------- JAVA按照以下四种顺序查找User classes(用户自己写的类)

1 默认的User classes . (dot) 就是指当前目录。

2系统变量CLASSPATH所指定的类库,该变量覆盖(override)默认的User classes。

3用命令行参数 -cp 或 -classpath指定的类库。这个时候覆盖默认的User classes 和CLASSPATH变量。

4 通过-jar 参数指定的jar文件。此时覆盖上面的三种情况,如果使用这种情况,所有的类文件必须来自指定的jar 文件
注意上面的查找顺序,后面的都会覆盖掉前面的。所以你可以完全不用配置classpath,但是如果你配置了,里面又没有".",这样你在c盘建了一个java文件(假设的单独的没有映入其他的自己写的类或jar包),你会编译通过,但是要运行就会出现异常了找不到知道的类。这样你就要通过-cp 类指定classpath就不会出错了。并且如果你java类中引入了自己写的类或者其他jar包类,那也要通过-cp 类指定classpath才能编译通过。 --------------------编程问答-------------------- JAVA按照以下四种顺序查找User classes(用户自己写的类)

1 默认的User classes . (dot) 就是指当前目录。

2系统变量CLASSPATH所指定的类库,该变量覆盖(override)默认的User classes。

3用命令行参数 -cp 或 -classpath指定的类库。这个时候覆盖默认的User classes 和CLASSPATH变量。

4 通过-jar 参数指定的jar文件。此时覆盖上面的三种情况,如果使用这种情况,所有的类文件必须来自指定的jar 文件
注意上面的查找顺序,后面的都会覆盖掉前面的。所以你可以完全不用配置classpath,但是如果你配置了,里面又没有".",这样你在c盘建了一个java文件(假设的单独的没有映入其他的自己写的类或jar包),你会编译通过,但是要运行就会出现异常了找不到知道的类。这样你就要通过-cp 类指定classpath就不会出错了。并且如果你java类中引入了自己写的类或者其他jar包类,那也要通过-cp 类指定classpath才能编译通过。 --------------------编程问答--------------------
引用
java命令本来就不搜索当前路径。
这句说错了。 --------------------编程问答--------------------      "."代表的就是当前查询的目录,我大概看了你的迷惑,希望我的意见对你有帮助。
在如果你对四楼的说发还有迷惑的话,请你在dos命令窗口编译java文件时转换一下路径,你就会明白了。
加入“.”是指明你当时搜索的路径是当前目录优先,如果不加|“.”的话,你在其他路径下编译java文件就找不到该文件,就会报错的。
    这是加“.”号的原因。事实上我们在设置路径的时候还在"."后面默认了一个路径,所以你当你设置classpath正确后,无论你在哪里编译都不会报错。 --------------------编程问答--------------------
你的实验有问题,鉴定完毕

引用 5 楼 clylucky 的回复:
楼上的说“java命令本来就不搜索当前路径。”让我更迷惑,我在设置了classpath但是没有设置".;"的情况下,在cmd中运行当前非classpath指明的目录中的class类,没问题,顺利运行。

又看了论坛里关于classpath是否要设置“.;”的几个贴子,还是没得到结果。

困了,去睡了。明天再来看。

谢谢关注!
--------------------编程问答-------------------- 可以不用配classpath,只要把path配对就好了!! --------------------编程问答-------------------- 还有中情况,classpath中不配置“.”但在结尾处加上“;”试试。这种配法也是可以的!! --------------------编程问答-------------------- 把 classpath 删除了,现在这个东西就是一个废物,
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,