Java编程的动态性,第1部分: 类和类装入 - 编程入门网
Java编程的动态性,第1部分: 类和类装入时间:2011-04-09 IBM Dennis M. Sosnoski本文是这个新系列文章的第一篇,该系列文章将讨论我称之为 Java 编程的动态性的一系 列主题。这些主题的范围从 Java 二进制类文件格式的基本结构,以及使用反射进行运行时 元数据访问,一直到在运行时修改和构造新类。贯穿整篇文章的公共线索是这样一种思想: 在 Java 平台上编程要比使用直接编译成本机代码的语言更具动态性。如果您理解了这些动 态方面,就可以使用 Java 编程完成那些在任何其它主流编程语言中不能完成的事情。 本文中,我将讨论一些基本概念,它们是这些 Java 平台动态特性的基础。这些概念的核 心是用于表示 Java 类的二进制格式,包括这些类装入到 JVM 时所发生的情况。本文不仅是 本系列其余几篇文章的基础,而且还演示了开发人员在使用 Java 平台时碰到的一些非常实 际的问题。 用二进制表示的类 使用 Java 语言的开发人员在用编译器编译他们的源代码时,通常不必关心对这些源代码 做了些什么这样的细节。但是本系列文章中,我将讨论从源代码到执行程序所涉及的许多幕 后细节,因此我将首先探讨由编译器生成的二进制类。 二进制类格式实际上是由 JVM 规范定义的。通常这些类表示是由编译器从 Java 语言源 代码生成的,而且它们通常存储在扩展名为 .class 的文件中。但是,这些特性都无关紧要 。已经开发了可以使用 Java 二进制类格式的其它一些编程语言,而且出于某些目的,还构 建了新的类表示,并被立即装入到运行中的 JVM。就 JVM 而言,重要的部分不是源代码以及 如何存储源代码,而是格式本身。 那么这个类格式实际看上去是什么样呢?清单 1 提供了一个(非常)简短的类的源代码 ,还附带了由编译器输出的类文件的部分十六进制显示: 清单 1. Hello.java 的源代码和(部分)二进制类文件
二进制类文件的内幕 清单 1 显示的二进制类表示中首先是“cafe babe”特征符,它标识 Java 二进制类格式 (并顺便作为一个永久的 ― 但在很大程度上未被认识到的 ― 礼物送给努力工作的 barista,他们本着开发人员所具备的精神构建 Java 平台)。这个特征符恰好是一种验证一 个数据块 确实声明成 Java 类格式的一个实例的简单方法。任何 Java 二进制类(甚至是文 件系统中没有出现的类)都需要以这四个字节作为开始。 该数据的其余部分不太吸引人。该特征符之后是一对类格式版本号(本例中,是由 1.4.1 javac 生成的次版本 0 和主版本 46 ― 用十六进制表示就是 0x2e),接着是常量池中项的 总数。项总数(本例中,是 26,或 0x001a)后面是实际的常量池数据。这里放着类定义所 用的所有常量。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |