Java 哪个jar将被加载到JVM中?

Java 哪个jar将被加载到JVM中?,java,jar,classpath,classloader,Java,Jar,Classpath,Classloader,因此,假设我在ext文件夹中有一个版本不同的jar,另一个版本在类路径中。jar将加载哪个版本?根据我的研究,由于扩展类加载器在类路径之前运行,因此将加载扩展中的库。或者它将被类路径覆盖。如果版本相同会发生什么呢?它将使用在类加载器的层次结构中可以找到的第一个类 因此,它将尝试从下一个ClassLoaders序列中获取类: BootstrapClassLoader由Bootstrap类组成(rt.jar和jre/lib中的几个其他重要的jar文件) 扩展ClassLoader由扩展类组成(jar

因此,假设我在
ext
文件夹中有一个版本不同的jar,另一个版本在
类路径中。jar将加载哪个版本?根据我的研究,由于
扩展类加载器
类路径
之前运行,因此将加载扩展中的库。或者它将被
类路径
覆盖。如果版本相同会发生什么呢?

它将使用在
类加载器的层次结构中可以找到的第一个类

因此,它将尝试从下一个
ClassLoader
s序列中获取类:

  • Bootstrap
    ClassLoader
    Bootstrap类组成(
    rt.jar
    jre/lib
    中的几个其他重要的
    jar
    文件)
  • 扩展
    ClassLoader
    扩展类组成(
    jar
    扩展文件夹
    jre/lib/ext
    中的文件)
  • 系统
    类加载器
    用户类(位于定义的类路径中的类)组成
  • 因此,由于您的类不是在#1中定义的,而是在#2和#3中定义的,因此它可以找到的第一个类将在#2中,因此它将获得扩展文件夹的版本,并忽略稍后在类路径中定义的版本


    另请参见

    它将是类级别而不是Jar级别。如果类(完全限定类名)已加载到vm,则将忽略ext中的新类或类路径libs类