这两天在用Eclipse编译文件的时候遇到些class无法找到的问题,于是想重新学习java查找class的机制。本文内容参考官方文档Java Tuturial How Classes are Found和Setting the Class Path。
1、Java加载类
Java 按照加载顺序将类分为三种:引导类、扩展类和用户类,分别依次载入。
- 引导类是如rt.jar等共同构成Java平台的关键Jar文件
- 扩展类是通过Java扩展机制创建的Jar文件,位于$JAVA_HOME/jre/lib/ext
- 用户类是开发者或第三方未按照Java扩展机制创建的类(大部分情况属于此)
引导类与扩展类一般不必设置加载路径,所以本文重点讨论用户类。
注意: tools.jar现在必须在包含在用户类路径中,否则无法使用。
用户类路径设置
用户类在使用时必须引用用户类路径(user class path),以完成后缀为jar、class、zip的类文件的引用。用户类路径有以下几种设置方式:
- 默认值 . 表示当前编辑文件路径。(不必设置,只要当前编辑路径下的同包或非包类文件都可以自动加载)
- CLASSPATH环境变量可以覆盖前者,这个就不多说了,Linux和Windows系统环境变量设置在网上都可以查到。
- -cp/-classpath选项 Java程序选项,可以覆盖CLASSPATH,用户在命令行状态下使用Java程序时可以作为一些非包类查找路径。
- -jar选项 这个比较特殊,在该选项下,所有使用的类必须包含在该jar文件中。
下面详细说下 -cp选项 设置要点。
-cp选项可以在不更改环境