Java核心技术第4章(8)

4.8 类路径

    在前面已经看到,类存储在文件系统的子目录中.类的路径必须与包名匹配.
    另外,类文件也可以存储在JAR(java归档)文件中.在一个JAR文件中,可以包含多个压缩形式的类文件和子目录,这样既可以节省又可以改善性能.JDK提供了许多JAR文件,例如在jre/lib/rt.jar中包含数千个类库文件.
    提示:JAR文件使用ZIP格式组织文件和子目录.可以使用所有ZIP应用程序查看内部的rt.jar以及其他的JAR文件.
    为了使类能够被多个程序共享,需要做到下面几点:
    1.把类放到一个目录中,例如/home/user/classdir .需要注意,这个目录是包树状结构的基目录.如果希望将com.horstmann.corejava.Employee类添加到其中,这个Employee.class类文件就必须位于子目录/home/user/classdir/com/horstmann/corejava中.
    2.将JAR文件放在一个目录中.例如:/home/user/archives .
    3.设置类路径( class path).类路径是所有包含类文件的路径的集合.
    在UNIX环境中,类路径中的不同项目之间采用冒号(:)分隔:
/home/user/classdir:.:/home/user/archives/archive.jar
    而在windows环境中,则以分号(;)分隔:
c:\classdir;.;c:\archives\archive.jar
    在上述两种情况中,句点(.)表示当前目录
    类路径包括:
    基目录/home/user/classdir或c:\classes;
    当前目录(.)
    JAR文件/home/user/archives/archive.jar或c:\archives\archive.jar
    警告
:javac编译器总是在当前目录中查找文件,但Java虚拟机仅在类路径中有"."目录的时候才查看当前目录.如果没有设置类路径,那也并不会产生问题,默认的类路径包含"."目录.然而如果设置了类路径却忘记了包含"."目录,则程序仍然可以通过编译,但不能运行.
    类路径所列出的目录和归档文件时搜寻类的起始点.下面看一个类路径示例:
/home/user/classdir:.:/home/user/archives/archive.jar
    假定虚拟机要搜寻com.horstmann.corejava.Employee类文件.
    它 首先要查看存储的jre/lib和jre/lib/ext目录下的归档文件中所存放的系统类文件.显然,在那里找不到相应的类文件, 然后再查看类路径.于是查看:
    /home/user/classdir/com/horstmann/corejava/Employee.class
    com/horstmann/corejava/Employee.class从当前目录开始
    com/horstmann/corejava/Employee.class inside /home/user/archives/archives.jar
    编译器定位文件要比虚拟机复杂得多.如果引用了一个类,而没有指出这个类所在的包,那么编译器将首先查找包含这个类的包,并询查所有的 import 命令,确定其中是否包含了被引用的类.例如,假定源文件包含指令:
import java.util.*;
import com.horstmann.corejava.*;
    并且源代码引用了Employee类.编译器将试图查找java.lang.Employee(因为java.lang包被默认导入),java.util.Employee,com.horstmann.corejava.Employee和当前包中的Employee .对这个类路径的所有位置中所列出的每一个类进行逐一查看.如果找到了一个以上的类,就会产生编译错误(因为类必须是唯一的,而 import 语句的次序却无关紧要).
    编译器的任务不止这些,它还要查看源文件是否比类文件新.如果是这样的话,那么源文件就会被自动地重新编译.
设置类路径
    最好采用-classpath(或-cp)选项指定类路径:
java -classpath /home/user/classdir:.:/home/user/archives/archive.jar MyProg
    或者
java -classpath c:\classdir;.;c:\archive\archive.jar MyProg
    整个命令应该书写在一行中.
    利用-classpath选项设置路径是首选的办法,也可以通过设置CLASSPATH环境变量完成整个操作.命令格式如下:
export CLASSPAHT=/home/user/classdir:.:/home/user/archives/archive.jar
    在Windows shell,命令格式如下:
set CLASSPATH=c:\classdir;.;c:\archives\archive.jar
    直到退出shell为止,类路径设置均有效.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值