JAVA类路径说明(新手必读)

上传人:宝路 文档编号:20891423 上传时间:2017-11-22 格式:DOC 页数:9 大小:75.12KB
返回 下载 相关 举报
JAVA类路径说明(新手必读)_第1页
第1页 / 共9页
JAVA类路径说明(新手必读)_第2页
第2页 / 共9页
JAVA类路径说明(新手必读)_第3页
第3页 / 共9页
JAVA类路径说明(新手必读)_第4页
第4页 / 共9页
JAVA类路径说明(新手必读)_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《JAVA类路径说明(新手必读)》由会员分享,可在线阅读,更多相关《JAVA类路径说明(新手必读)(9页珍藏版)》请在金锄头文库上搜索。

1、一、类路径 (class path) 当你满怀着希望安装好 java,然后兴冲冲地写了个“hello world” ,然后编译, 运行,就等着那两个美好的单词出现在眼前。可是不幸的是,只看到了“Cant find class HelloWorld”或者“Exception in thread main java.lang.NoSuchMethodError: main。为什么呢?编译好的 class 明明在呀。我们一起来看一看 java 程序的运行过程。我们已经知道 java 是通过 java 虚拟机来解释运行的,也就是通过 java 命令javac 编译生成的.class 文件就是虚拟机要执

2、行的代码,称之为字节码(bytecode),虚拟机通过 classloader 来装载这些字节码,也就是通常意义上的类。这里就有一个问题,classloader 从哪里知道 java 本身的类库及用户自己的类在什么地方呢?或者有着缺省值(当前路径) ,或者要有一个用户指定的变量来表明,这个变量就是类路径(classpath),或者在运行的时候传参数给虚拟机。这也就是指明 classpath的三个方法。编译的过程和运行的过程大同小异,只是一个是找出来编译,另一个是找出来装载。实际上 java 虚拟机是由 java luncher 初始化的,也就是 java (或 java.exe) 这个程序来做

3、的。虚拟机按以下顺序搜索并装载所有需要的类: 1、引导类:组成 java 平台的类,包含 rt.jar 和 i18n.jar 中的类。2、扩展类:使用 java 扩展机制的类,都是位于扩展目录($JAVA_HOME/jre/lib/ext) 中的.jar 档案包。3、用户类:开发者定义的类或者没有使用 java 扩展机制的第三方产品。你必须在命令行中使用-classpath 选项或者使用 CLASSPATH 环境变量来确定这些类的位置。我们在上面所说的用户自己的类就是特指这些类。这样,一般来说,用户只需指定用户类的位置,引导类和扩展类是“自动”寻找的。那么到底该怎么做呢?用户类路径就是一些包含

4、类文件的目录,.jar, .zip 文件的列表,至于类具体怎么找,因为牵扯到 package 的问题,下面将会说到,暂时可认为只要包含了这个类就算找到了这个类。根据平台的不同分隔符略有不同,类 unix 的系统基本上都是“:” ,windows 多是“;” 。其可能的来源是: * “. ”, 即当前目录,这个是缺省值。* CLASSPATH 环境变量,一旦设置,将缺省值覆盖。* 命令行参数-cp 或者-classpath,一旦指定,将上两者覆盖。* 由-jar 参数指定的.jar 档案包,就把所有其他的值覆盖,所有的类都来自这个指定的档案包中。由于生成可执行的.jar 文件,还需要其他一些知识

5、,比如 package,还有特定的配置文件,本文的最后会提到。可先看看 jdk 自带的一些例子。我们举个 HelloWorld 的例子来说明。先做以下假设: * 当前目录是/HelloWorld(或 c:HelloWorld, 以后都使用前一个)* jdk 版本为 1.2.2 (linux 下的)* PATH 环境变量设置正确。(这样可以在任何目录下都可以使用工具)* 文件是 HelloWorld.java,内容是:public class HelloWorld public static void main(String args)System.out.println( Hello Worl

6、d!n ); System.exit(0); 首先这个文件一定要写对,如果对 c 熟悉的话,很有可能写成这样:public static void main(int argc,String argv) . 这样是不对的,不信可以试一试。由于手头没有 java 的规范,所以作如下猜想: java的 application 程序,必须以 public static void main(String)开始,其他不一样的都不行。到现在为止,我们设置方面只设置了 PATH。1、当前路径就是指你的.class 文件在当前目录下,HelloWorld$ javac HelloWorld.java /这一步不

7、会有多大问题,HelloWorld$ java HelloWorld / 这一步可能就会有问题 .。如果出了象开头那样的问题,首先确定不是由于敲错命令而出错。如果没有敲错命令,那么接着做:HelloWorld$ echo $CLASSPATH或者 c:HelloWorld echo %CLASSPATH%看看 CLASSPATH 环境变量是否设置了, 如果设置了,那么用以下命令: HelloWorld$ CLASSPATH=或者 c:HelloWorld set CLASSPATH=来使它为空,然后重新运行。这次用户类路径缺省的是. ,所以应该不会有相同的问题了。还有一个方法就是把. 加入到

8、CLASSPATH 中。/$ CLASSPATH=$CLASSPATH:.或者 c:HelloWorld set CLASSPATH=%CLASSPATH%; 同样也可以成功. Good Luck。2、 当你的程序需要第三方的类库支持,而且比较常用,就可以采用此种方法。比如常用的数据库驱动程序,写 servlet 需要的 servlet 包等等。设置方法就是在环境变量中加入CLASSPATH。然后就可以直接编译运行了。还是以 HelloWorld 为例,比如你想在根目录中运行它,那么你直接在根目录下执行 $ java HelloWorld或者 c: java HelloWorld 这样肯定会出

9、错,如果你的 CLASSPATH 没有改动的话.。我想大家应该知道为什么错了吧,那么怎么改呢?前面说过,用户类路径就是一些包含你所需要的类的目录,.jar 档案包,.zip 包。现在没有生成包,所以只好把 HelloWorld.class 所在的目录加到 CLASSPATH 了,根据前面的做法,再运行一次,看看,呵呵,成功了,换个路径,又成功了!不仅仅以直接运行其中的类,当你要 import 其中的某些类时,同样处理。不知道你想到没有,随着你的系统的不断的扩充, (当然了,都是一些需要 java 的东西。 如果都加到这个环境变量里,那这个变量会越来越臃肿,虽然环境变量空间可以开很大,总 觉得有

10、些不舒服。看看下面一个方法。3、在命令行参数中指明 classpath。还是和上面相同的目标,在任何目录下执行 HelloWorld,用这个方法怎么实现呢? /$ java -cp /HelloWorld HelloWorld或者 c: java -cp c:HelloWorld HelloWorld就可以了。这是这种方法的最简单的应用了。当你使用了另外的包的时候,还可以采用用这种方法。例如:$ javac -classpath aPath/aPackage.jar:. myJava.java $ java -cp aPath/aPackage.jar:. myJava 或者 c: javac

11、 -classpath aPathaPackage.jar;. myJava.java c: java -cp aPathaPackage.jar;. myJava 这种方法也有一个不方便的的地方就是当第三方包所在的路径较长或者需要两个以上包包的时候,每次编译运行都要写很长,非常不方便,这时候可以写脚本来解决。 比如一个例子:compile (文件,权限改为可执行,当前目录) $ cat compile -#!/bin/bashjavac -classpath aPathaPackage.jar:anotherPathanotherPackage.jar:. myJavva.java -run

12、 (文件,权限改为可执行,当前目录) $cat run - #!/bin/bash java -cp aPathaPackage.jar:anotherPathanotherPackage.jar:. myJava -或者: compile.batc:HelloWorld type compile.bat - javac -classpath aPathaPackage.jar:anotherPathanotherPackage.jar:. myJavva.java -run.batc:HelloWorld type run.bat-java -cp aPathaPackage.jar:ano

13、therPathanotherPackage.jar:. myJava- 就可以了。试试看。前面提到了扩展类,扩展类是什么呢?java 的扩展类就是应用程序开发者用来扩展核心平台功能的 java 类的包(或者是 native code) 。虚拟机能像使用系统类一样使用这些扩展类。有人建议可以把包放入扩展目录里,这样,CLASSPATH 也不用设了,也不用指定了,岂不是很方便?确实可以正确运行,但是个人认为这样不好,不能什么东西都往里搁,一些标准的扩展包可以,比如,JavaServlet,Java3D 等等。可以提个建议,加一个环境变量,比如叫 JARPATH,指定一个目录,专门存放用户的 ja

14、r 、zip 等包,这个要等 SUN 公司来做了。windows98 下,我原来安装的时候,一直装不上,总是死机,好不容易装上了,缺省的是不能运行正确的,然后把 tool.jar 放入 CLASSPATH 后工作正常。现在作测试,去掉仍然是正确的。经过多次测试,发现如果原来曾装过 jdk 的都很好,没有装过的装的时候会死机,多装几次就可以了。如果你发现正确安装后,不能正常工作,就把 tools.jar加入 CLASSPATH,试一下。二、包 (package)Java 中的“包”是一个比较重要的概念,package 是这样定义的: Definition: A package is a collection of related classes and interfaces that provides access protection and namespace management。也就是: 一个包就是一些提供访问保护和命名空间管理的相关类与接口的集合。使用包的目的就是使类容易查找使用,防止命名冲突,以及控制访问。这里我们不讨论关于包的过多的东西,只讨论和编译,运行,类路径相关的东西。至于包的其他内容,请自己查阅相关文档。简单一点来说,包就是一个目录,下面的子包就是子目录,这个包里的类就是这个目

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号