Java Class Path

我们在系统的环境变量里面添加一个新的变量叫 CLASSPATH。他的描述方法用PATH的描述方法:

可以看到,新的变量 CLASSPATH使用的系统的路径表示的(例如D:\classes\ 就是一个系统的路径),但是不能用环境环境变量PATH,所以不能写成:

%Path%;D:\classes\;D:\j2sdk1.4.2b\lib\dt.jar;D:\j2sdk1.4.2b\lib\tools.jar

或者

$Path;D:\classes\;D:\j2sdk1.4.2b\lib\dt.jar;D:\j2sdk1.4.2b\lib\tools.jar

这样当jvm想要调用Java文件(class文件)的时候,不能通过PATH寻找,只能 从CLASSPATH寻找了。

让我们看一个例子:

D:\JavaTest>javac HelloWorld.java

这一步的执行过程是:

1.系统发现启动的程序是javac,于是开始寻找javac.exe。 寻找的次序按照上篇所述寻找notepad.exe的顺序雷同

2.找到之后,运行javac.exe,附加参数HelloWorld.java

3.javac编译HelloWorld.java -> HelloWorld.class

如果HelloWorld.java中有其他类库(类库就是分类整理好的一堆class 文件)的引用,例如:

import java.io.*; import com.hdpan.util.*;

对于标准类库的引用,像上面的"java.io.*",可以直接使用,也就是说它 不需要显示的放在系统的环境变量CLASSPATH中。

而对于非标准类库,像"com.hdpan.util.*",javac怎么来找到它呢? 上面说了,它是通过系统的环境变量CLASSPATH来找:让我们再回顾一下我 们的CLASSPATH是如何设定的:

.;D:\classes\;D:\j2sdk1.4.2b\lib\dt.jar;D:\j2sdk1.4.2b\lib\tools.jar

然后再看看当前的目录结构:

JAVA中classpath的了解[归纳] - 无风 - 听雨无风

首先找到D:\JavaTest\HelloWorld.java,这个是我们正在编译的文件,接 下来,我们来看看javac是怎么来寻找net.eastdawn.util.*的:

发现是非标准类库,开始搜索CLASSPATH,第一个CLASSPATH是".",也就是当前目录,当前目录有一个net文件夹,然后eastdawn,可是eastdawn文件夹下面没有util文件夹,于是第一个CLASSPATH搜索失败。然后搜索第二个CLASSPATH "D:\classes\",果然再此发现了net\eastdawn\util\,于是这里编译通过。

至此,D:\JavaTest>javac HelloWorld.java 执行完毕。

现在也应该明白为什么在CLASSPATH的前面会有一个 "."了吧?他就是为了优先 搜索当前目录下的class。

运行完javac之后,当前目录多一个文件:HelloWorld.class,运行它:

D:\JavaTest>java HelloWorld

(注意:是java HelloWorld,而不是java HelloWorld.class)

这里用到了java命令,所以启动一个jvm(jvm是什么?看前面的文章吧,:)), 开始搜索CLASSPATH,首先按照"."搜索,在当前目录找到了HelloWorld.class, 于是运行!

现在你明白了为什么许多人别写了HelloWorld却在运行的时候出现这个了吧:

你想对了,就是因为jre不能根据CLASSPATH来找到HelloWorld.class, 哪怕HelloWorld.class就在当前目录,当时环境变量的CLASSPATH里没有 "."这个 设定,同样是找不到!

在web工程下,CLASSPATH的具体目录以及解释是:

classpath是指 WEB-INF文件夹下的classes目录

classes含义:

1.存放各种资源配置文件 eg.init.properties log4j.properties struts.xml

2.存放模板文件 eg.actionerror.ftl

3.存放class文件 对应的是项目开发时的src目录编译文件

总结:这是一个定位资源的入口

lib和classes下文件访问优先级的问题: lib>classes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值