Java 类路径


Java中类存储在文件系统的子目录中,类的路径必须和包名匹配。
类文件也可以存储在JAR文件中,JAR文件使用ZIP格式组织文件和子目录,例如jre/lib/rt.jar中包含了数千个类库文件。

1 如何使你的类被多个程序共享

  • 把类放到一个包树状结构的目录中,例如在/home/user/classdir中添加com.horstmann.corejava.Emplyee类,应该把Employee类文件放在/home/user/classdir/com/horstmann/corejava中
  • 将JAR文件放在一个目录中,例如在/home/user/archives
  • 设置类路径(class path)

2 类路径是什么

类路径告诉javac编译器和java解释器(JVM的一部分)在哪里寻找它们要执行或导入的类。

2.1 一个类路径应该包含什么

在Windows系统中,类路径的不同项目之间采用分号(;)分割,例如:

c:\classdir;.;c:\archives\archive.jar

一般类路径包含这三种项目:

  • 类目录
  • 当前目录,一般用(.)表示
  • JAR文件

一般运行时库文件(rt.jar和在jre/lib与jre/lib/ext目录下的其他JAR文件)会被自动搜索,所以无需将它们显式地列在类路径中。

2.2 设置当前目录的重要性

javac编译器总是在当前的目录中查找文件,而java虚拟机仅在类路径中包含有(.)的情况下才会查看当前目录,所以类路径中一定要包含当前目录,否则可能出现程序能够通过编译但无法运行的情况。

2.3 JVM如何定位类文件

假设给定了类路径如下:

c:\user\classdir;.;c:\user\archives\archive.jar

虚拟机如何搜索com.horstmann.corejava.Employee类文件呢?

  • 首先查看存储在jre/lib和jre/lib/ext目录下的JAR文件中所存放的系统类文件
  • 检查c:\user\classdir\com\horstmann\corejava\Employee.class文件是否存在
  • 检查 .\com\horstmann\corejava\Employee.class文件是否存在
  • 检查 c:\user\archives\archive.jar中是否存在com\horstmann\corejava\Employee.class类。

2.4 javac编译器如何定位类文件

类路径和2.3相同,javac编译器如何寻找Employee类呢?
如何引用了一个类并且没有指出这个类所在的包,那么编译器将首先查找包含这个类的包,并询查所有的import指令,确定其中是否包含了被引用的类。
假定源文件包含指令:

import java.util.*;
import com.horstmann.corejava.*;

且源代码引用了Employee类,那么编译器将试图查找java.lang.Employee(java.lang是默认导入的)、java.util.Employee、com.horstmann.corejava.Employee类和当前包中的Employee类。并逐一查看,但是如果找到了不止一个Employee类,就会产生编译错误。

3 如何设置类路径

3.1采用 -classpath(或 -cp)指定类路径

java -classpath c:\user\classdir;.;c:\user\archives\archive.jar MyProg

3.2 设置CLASSPATH环境变量

在Windows Shell中
set CLASSPATH=c:\user\classdir;.;c:\user\archives\archive.jar

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值