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文件发现文件格式错误或者不能被解析时抛出此错误
[参考资料]
1、Sun j2sdk 1.4.2 _08 api
2、Bill Venners - Inside the Java Virtual Machine