美文网首页
Java classpath

Java classpath

作者: Leocat | 来源:发表于2020-02-12 00:27 被阅读0次

    一、类加载器与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

    相关文章

      网友评论

          本文标题:Java classpath

          本文链接:https://www.haomeiwen.com/subject/tavffhtx.html