如何知道哪个类被java中的哪个类Loader加载?

时间:2015-06-20 16:27:53

标签: java classloader

最近,计算机科学专业人员要求我描述Java中的类加载器。我向他解释了3个类加载器,即#34; BootStrap CL"," Extension CL"和"应用程序CL",我还向他解释了" Deligation Algorithm"。接下来他让我证明,有人能给我一个代码来实际看到执行中的类加载器吗?

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题:

  1. 显示不同的类具有不同的ClassLoader个对象。例如,YourMainClass.class.getClassLoader()可能是sun.misc.Launcher$AppClassLoader,而System.class.getClassLoader()是null(与其他系统类一样)。这是一个快速测试:

    • 来自JAR的班级:sun.misc.Launcher$AppClassLoader@2a139a55
    • 主要课程:sun.misc.Launcher$AppClassLoader@2a139a55
    • java.lang.System'类加载器:null
    • 系统类加载器:sun.misc.Launcher$AppClassLoader@2a139a55
    • 系统类加载器的父级:sun.misc.Launcher$ExtClassLoader@4aa298b7
    • 主要班级的班级家长:sun.misc.Launcher$ExtClassLoader@4aa298b7
    • Jar类加载器的父级:sun.misc.Launcher$ExtClassLoader@4aa298b7

    父类加载器按以下方式使用:

    1. 类加载器接收加载类的请求。如果它已加载,则返回它。
    2. 该类加载器首先要求其父级加载它。如果父级无法加载它,那么该类加载器本身会加载并返回它。
  2. 显示OpenJDK源及其多个ClassLoader。

  3. 描述在现实世界中发生这种情况的应用程序。您可以讨论在运行时定义类的脚本引擎,servlet容器,某些构建系统等等。