两个jar有同一个类中的同一方法,但是不同的返回类型, 请问一个jvm能加载这两个jar包吗?

解决方案 »

  1.   

    在类路径中位置靠前的那个类将会被先定位到,从而加载这个类。
    但有些情形下,你也不知道两个jar包哪个位置靠前,所以结果不可预料。
      

  2.   

    只会加载一个,这个要看jvm如何访问类文件了
      

  3.   

    1 你以为用的是某个类,没想到系统用的是另一个类
    2 有时系统动态加载外部JVM进程,类路径动态生成,你都不知道哪个类会中标
      

  4.   

       应该只会加载一个类
       由于ClassLoader的委托机制,在找到一个类后,classloader会加载这个类的字节码到内存,下次会直接从内存取。
       但是具体是那个类,就要看这个类是那个classLoader加载的,JVM在运行时会产生三个ClassLoader:Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader.Bootstrap是用C++编写的,我们在Java中看不到它,是null,是JVM自带的类装载器,用来装载核心类库,如java.lang.*等。
       如果运行时发现没有这个类,那么classloader首先委托父加载器查找这个类,因此如果在jvm lib目录下的那个class会被加载
      

  5.   

    虚拟机通常情况下只会加载其中的一个类,如果是用默认的类装载器的话。至于加载哪个,要看虚拟机会先读取到哪个JAR包了。
    不过你可以实现两个自定义的类装载其来指定某个jar包来装载类,这样两个同名类就都会被装载,不过即使这样,这两个类也不能同时在一起使用,但是你可以通过反射的方式去同时调用两个类,当然,反射的时候你还是要指定类装载器的。