当前位置: 首页 > 面试题库 >

一个简单程序的类加载流程

淳于涛
2023-03-14
问题内容

我现在才开始学习Java的内部体系结构。我大致了解了类加载的概念,该类在jvm运行时加载所需的类,ClassNotFoundException在找不到类且特定的类加载器加载由该类引用的类时抛出。

有人可以在下面的示例Java代码中清楚地说明类加载的流程,即引导类加载和用户定义的类加载的顺序。

import java.io.File;
public class Sample
{
    public static void main(String[] args)
    {
        String fileName = "sample";
        File file = new File(fileName);
        file.isFile();
    }
}

我还从参考资料中了解到“ classloader维护其加载的类的名称空间”。通过名称空间,这是否意味着类的文字名称?也有人可以解释一下它的含义/优势吗?


问题答案:

您将Sample按照以下方式运行课程

> java Sample

如果需要一点魔术,请查看-verbose:classoption 的输出,然后看到大量的以下行。

[Opened C:\jdk1.6.0_14\jre\lib\rt.jar]
[Loaded java.lang.Object from C:\jdk1.6.0_14\jre\lib\rt.jar]
[Loaded java.io.Serializable from C:\jdk1.6.0_14\jre\lib\rt.jar]
[Loaded java.lang.Comparable from C:\jdk1.6.0_14\jre\lib\rt.jar]
.
.
.
.
.
.
[Loaded java.security.cert.Certificate from C:\jdk1.6.0_14\jre\lib\rt.jar]
[Loaded Sample from file:/D:/tmp/]
[Loaded java.lang.Shutdown from C:\jdk1.6.0_14\jre\lib\rt.jar]
[Loaded java.lang.Shutdown$Lock from C:\jdk1.6.0_14\jre\lib\rt.jar]

您会看到从中\jre\lib\rt.jar加载了一堆类,远远早于由Bootstrap类加载器(或Primordial)加载您的类。这些是运行因此由Bootstrap加载的Java程序的先决条件。

另一组罐子由Extension类加载器加载。在此特定示例中,不需要lib中的任何类,\jre\lib\ext因此不会加载它。但是,专门为扩展类加载器分配了从扩展库加载类的任务。

编辑: 除了标准平台Java类之外,Sun / Oracle还提供了一组jar,用于 扩展平台的核心API
。放在扩展lib文件夹中的jar会自动放置在classpath中,因此不需要显式包含在classpath中。这是关于同一主题的不错的官方文章。

最后,在Bootstrap和Extension完成加载后,SampleApplication类加载器加载您的类。



 类似资料:
  • 本文向大家介绍请简单描述一下类的加载过程相关面试题,主要包含被问及请简单描述一下类的加载过程时的应答技巧和注意事项,需要的朋友参考一下 考察点:JVM 如下图所示,JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的

  • You are the light of the world. A city located on a hill cannot be hidden. People do not light a lamp and put it under a basket but on a lampstand, and it gives light to all in the house. In te same w

  • 我正在我的web应用程序中集成一个web服务。web服务为我提供了一个。dll和。jar文件。我把.dd放在/jre/bin中,把.jar放在/jre/lib中,然后开发代码并部署应用程序。在开发过程中,我还将。jar文件包含在我的项目构建路径中。在tomcat中运行它时,它给了我一个错误:

  • 如果认为Tomcat的公共类加载器正在加载这个类,实例化它(按照:http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html),然后将引用传递给webapp,从而绕过webapp类加载器,这是不是错的? 是否有一种方法可以告诉Tomcat实例化我的单例(强制公共类加载程序执行),然后提供该实例来满足我的WebApp的依赖性? 任何

  • 本文向大家介绍一个超级简单的python web程序,包括了一个超级简单的python web程序的使用技巧和注意事项,需要的朋友参考一下 在MAC/LINUX环境下,执行vi hello.py命令,并输入以下代码 执行python hello.py 8080出现  http://0.0.0.0:8080/ 然后访问"http://localhost:8080/Service/Match"地址,返

  • 本文向大家介绍C#程序创建一个简单线程,包括了C#程序创建一个简单线程的使用技巧和注意事项,需要的朋友参考一下 为了创建线程,我创建了一个函数- 调用上述函数以创建线程,并创建一个新的ThreadStart委托- 示例 使用以下代码创建一个简单的线程。 输出结果