哪个加载器负责在JVM中加载自己的类

时间:2017-10-22 06:26:06

标签: java jvm

我读了JVM的概念,那里有类加载器

  1. Bootstrap类加载器
  2. 扩展类加载器
  3. 应用程序类加载器
  4. 我理解这三者的概念,但我怀疑谁负责加载自己的类。

    示例:

    import java.lang。*;(Bootstrap Class loader)

    class MyClass{
         public static void main(String args[]){
         -----------
         ----------------
         }
    }
    

    所以这里谁负责加载 MyClass 这里

1 个答案:

答案 0 :(得分:2)

通过消除,它不能是一个或第二个,因为MyClass不是JRE类,也不是JRE扩展名。

因此,MyClass由应用程序类加载器加载。

要检查这一点,您可以在此类实例上调用getClassLoader()方法:

public static void main(String args[]) {
    System.out.println(MyClass.class.getClassLoader());
}

它将输出以下内容:

  

sun.misc.Launcher$AppClassLoader@1d16e93

AppClassLoader名称相当有意义。

您可以在this Oracle blog上找到一些参考信息:

  

第3。应用程序类加载器

     
      
  1. 从应用程序类路径
  2. 加载类         

    ...

         
        
    1. 这是加载Java应用程序“main”类的加载器   (带有main方法的类)。
    2.         

      在Sun的实现中,这是一个实例   sun.misc.Launcher $ AppClassLoader(实际上它是一个内部类   sun.misc.Launcher class)。

博客条目已旧,但这一点仍然有效。