📅  最后修改于: 2023-12-03 15:10:15.632000             🧑  作者: Mango
教资会网络是一个面向教育行业的定期考试,旨在选拔出具备专业知识和教学能力的优秀人才。UGC NET CS是该考试中计算机科学领域的一项考试,该考试主要涉及计算机科学的理论知识和应用能力。
以下是问题 34:
What is true about class loading in Java ?
(A) An object can be stored only in one class
(B) A class file can contain only one public class
(C) A package can be loaded by multiple class loaders
(D) A sub-class loaded by a class loader can refer to a super class loaded by a different class loader
选项 (C) 和 (D) 是正确的。
(C)表明一个包可以被多个类加载器加载,因为Java中有三种类加载器:引导类加载器,扩展类加载器和系统类加载器。每个类加载器都有自己的命名空间,所以它们可以用不同的方式加载同一个包。
(D)表明一个由类加载器加载的子类可以引用由另一个类加载器加载的父类。由于不同的类加载器拥有不同的命名空间,因此它们将为同一个类创建不同的 Class 对象。由于这些 Class 对象在命名空间之间是不同的,因此它们可以由不同的类加载器加载。
以下是Java代码片段用于演示Java类加载器的工作方式。
public class ClassLoadingDemo {
public static void main(String[] args) {
// BootStrap Classloader
ClassLoader bootClassLoader = String.class.getClassLoader();
System.out.println("BootStarp ClassLoader: " + bootClassLoader); // null
// Extension ClassLoader
ClassLoader extClassLoader = ClassLoader.getSystemClassLoader().getParent();
System.out.println("Extenstion ClassLoader: " + extClassLoader); // sun.misc.Launcher$ExtClassLoader@4e0e2f2a
// Application ClassLoader
ClassLoader appClassLoader = ClassLoader.getSystemClassLoader();
System.out.println("Application ClassLoader: " + appClassLoader); // sun.misc.Launcher$AppClassLoader@18b4aac2
}
}
这段代码展示了三种不同的类加载器:引导类加载器,扩展类加载器和应用程序类加载器。引导类加载器是最高级别的类加载器,它加载JRE的核心类。扩展类加载器加载Java中的\lib\ext目录中的扩展JAR和ZIP文件。最后,应用程序类加载器加载位于类路径上的类。