先贴一段
Java 基本结构
Java 结构包括四个不同而又相关的部分:
Java 语言、 class 文件格式、应用程序接 口、虚拟机
其中,虚拟机的主要任务是在程序运行中需要的时候调用 class 文件并执行其中的字节码。一个 Java 应 用有两种 class loader : the system class loader 和 class loader objects 。 The primordial class loader 通常装 载本地磁盘上包括 Java API 在内的信任类,它是虚拟机的一部分。在运行时,还可以定制 class loader objects 来加载其他,不是虚拟机的一部分,而是程序运行的一部分。
Class 文件结构
Java class 文件的标志:开头四个字节为 0xCAFEBABE
ClassLoader
ClassLoader 负责定位并导入 class 的 二进制数据,并验证其正确性,分配初始化类成员变量的存储空间并初始化等等。所有的 class loader 都必须通过以下三个方法来完成以上任务。
protected final Class defineClass( String name,byte[] b, int off, int len,
ProtectionDomain protectionDomain)
throws ClassFormatError
将字节码转变为 Class 实 例,这个实例必须经过解析才能够使用。
protected final Class findSystemClass( String name)
throws ClassNotFoundException
如果 the primordial class loader 已经加载成功此类,则返回其索引,否则抛出 ClassNotFoundException 。
protected final void resolveClass( Class c)
将类实例初始化
ClassFormatError
当虚拟机试图读取一个 class 文 件发现文件格式错误或者不能被解析时抛出此错误