Java classpath

2020-02-12  本文已影响0人  Leocat

一、类加载器与classpath

以下为系统中的三种类加载器,每个类加载器都有自己用来寻找类文件的路径。其中系统类加载器负责加载classpath(用户类路径)上指定的类库,classpath是包含有class文件的目录jar包或者是war包

  1. 启动类加载器(Bootstrap ClassLoader) 此类加载器负责将存放在 <JAVA_HOME>\lib 目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是 虚拟机识别 的(仅按照文件名识别,如rt.jar,名字不符合的类库即使放在lib目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法被Java程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给引导类加载器,直接使用null代替即可。
  2. 扩展类加载器(Extension ClassLoader) 这个类加载器是由ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将<Java_Home>/lib/ext或者被java.ext.dir系统变量所指定路径中的所有类库加载到内存中,开发者可以直接使用扩展类加载器。
  3. 应用程序类加载器(Application ClassLoader) 这个类加载器是由AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。由于这个类加载器是ClassLoader中的getSystemClassLoader()方法的返回值,因此一般称为 系统类加载器。它负责加载用户类路径(ClassPath)上所指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中 默认的类加载器

二、classpath的获取规则

  1. 当前路径"."
  2. 系统变量CLASSPATH
  3. 命令行设置的-cp或者-classpath
  4. 使用-jar命令设置的jar包。
    其中,四种方式优先级逐步提升,也就是

当前路径 < 系统变量CLASSPATH < -cp命令行设置的路径 < -jar设置的路径

三、如何设置classpath

  1. 设置系统变量

setenv CLASSPATH path1:path2

  1. 命令行使用-cp设置

-cp path1:path2...

  1. -jar命令

-jar xxx.jar

linux下都使用“:”分隔

四、参考资料

深入理解Java虚拟机

Setting the class path

How Classes are Found

上一篇下一篇

猜你喜欢

热点阅读