java类路径classpath

java编译器编译.java文件和java虚拟机执行.class文件时的路径和写法不一样。

在没有设置任何classpath环境变量的情况下,javac可以编译全路径的.java文件。例如:

javac d:\myjava\HelloWorld.java

编译后,在.java同路径目录下生成class文件。

默认java虚拟机要从classpath环境变量的路径中搜索class文件去执行,对于java虚拟机来说,这不是类文件,而是类。它只有类路径,而没有文件系统路径。而classpath环境变量正是为java虚拟机提供搜索类路径的环境。注意,虚拟机不会递归搜索classpath定义的路径。

也就是说,上面的java文件可以正确编译,但却不能执行。但如果将classpath设置为".;d:\myjava\",则java虚拟机将从当前路径搜索,从d:\myjava下搜索class文件。

于是上面的HelloWorld.java编译后,可以直接执行:

java HelloWorld

或者切换到d:\myjava目录下,执行java HelloWorld

 

总之,要明确的是javac编译器搜索的是文件路径,和环境变量classpath无关。而java虚拟机搜索的是类文件,严格地说是类,搜索路径由classpath决定,且有先后顺序。

posted @ 2019-04-27 22:16  九龙湖的混子  阅读(281)  评论(0编辑  收藏  举报