`

CLASSPATH

    博客分类:
  • java
阅读更多

      CLASSPATH称为环境变量,它是javac和java默认寻找的路径。

javac的命令语法是这样的: javac <选项> <源文件>  
我们常用的情况是这样的: javac -classpath <类路径> <要编译的java源文件>  

这里的类路径输入什么呢?这里的类路径是指要编译的java源文件中所用的非java的基础API中的类在那个目录下,路径可以是多个目录,用分号隔开来。比如说我们要编译App.java这个文件,而这个文件中用到了com.util这个包中的MyDate这个类,现在我们假设MyDate这个类存在目录是:d:\mylib\com\util\MyDate.class,那么我们如何编译App这个类呢?
我们的命令如下:    javac -classpath d:\mylib App.java  

注意这里的classpath的内容,我们只是指定路径到package所在目录,并不能把package一起指定进去,而且MyDate.class必须在com\util这个目录中,因为这个类定义了package为com.util。好了现在你对javac中的classpath明白了吗?  

我们再来看java这个命令,这个命令的语法是这样的:   java [选项] 类 [参数]

比如说以上面的例子,我们假设App这个类位于com.app这个package中,它的存放目录是:d:\dev\myapp\com\app\App.class,那么我们该如何运行这个类呢?
命令如下:   java -classpath d:\dev\myapp;d:\mylib com.app.App

从命令中我们可以看到,在classpath后面我们指定两个目录,分别是App这个类的package所在的目录和MyDate这个类的package所在的目录,这里的类路径要给定的是要运行的类和这个类用到的所有类的package所在的目录,多个目录之间用分号隔离开来,最后指定要运行的类的时候必须加上package。  

好了到这里你应该彻底掌握了编译java程序和运行java程序的诀窍了吧。如果我们在系统环境变量中设置了CLASSPATH的话,在命令行中通过java运行的时候如果再不指定CLASSPATH参数,那么就会导致java虚拟机只是按照CLASSPATH环境变量中的目录搜索类,而不在你的当前目录下搜索类,结果自然会出现Exception in thread "main" java.lang.NoClassDefFoundError,所以当你看到这个错误的时候请查看一下你的系统环境变量,如果没有设置CLASSPATH,那么在检查一下你的当前目录。为了确保万无一失,按照上面讲述的例子进行操作是不会发生任何错误。

 

注意:

 

(1)假如有这样一个文件

“F:\workspace\prj\src\pckgxxx\Hello.class”

那么“F:\workspace\prj\src\pckgxxx”是路径Hello.class是文件名这是常识。

java命令下,这个常识有了例外。假如Hello.java里面有这样一句,

package  pckgxxx

例外就出现了,这时候,路径是“F:\workspace\prj\src”

packagexxx.Hello.class才是文件名,注意不是“/”,是“.”

classpath中的设置为“F:\workspace\prj\src”,命令为javapackagexxx.Hello。而javac只能用javac F:\workspace\prj\src\pckgxxx\Hello.java

看来.class文件有classpath提供方便,.java文件可没有“javapath”这样的待遇。

(2)当java文件中带有包名时,javac编译后,用java命令需退到包名的上一级,然后用

java 包名.文件  来运行。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics