网站大量收购独家精品文档,联系QQ:2885784924

编程的动态性,第 1 部分 类与类装入.docVIP

编程的动态性,第 1 部分 类与类装入.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编程的动态性,第 1 部分 类与类装入

编程的动态性,第 1 部分 类和类装入 文档选项 未显示需要JavaScript的文档选项 级别:初级 Dennis M.Sosnoski(dms@),总裁,Sosnoski Software Solutions,Inc. 2003年6月06日 这一有关Java编程动态方面的新的系列文章研究了执行Java应用程序时幕后所发生的事情。企业Java专家Dennis Sosnoski提供了Java二进制类格式以及在JVM内部类所发生的情况的内幕。接着,他将讨论类装入问题,其范围涉及从运行简单的Java应用程序所需的类的数量到可能造成J2EE及类似的复杂体系结构出现问题的类装入器冲突。本文是这个新系列文章的第一篇,该系列文章将讨论我称之为Java编程的动态性的一系列主题。这些主题的范围从Java二进制类文件格式的基本结构,以及使用反射进行运行时元数据访问,一直到在运行时修改和构造新类。贯穿整篇文章的公共线索是这样一种思想:在Java平台上编程要比使用直接编译成本机代码的语言更具动态性。如果您理解了这些动态方面,就可以使用Java编程完成那些在任何其它主流编程语言中不能完成的事情。 本文中,我将讨论一些基本概念,它们是这些Java平台动态特性的基础。这些概念的核心是用于表示Java类的二进制格式,包括这些类装入到JVM时所发生的情况。本文不仅是本系列其余几篇文章的基础,而且还演示了开发人员在使用Java平台时碰到的一些非常实际的问题。 使用Java语言的开发人员在用编译器编译他们的源代码时,通常不必关心对这些源代码做了些什么这样的细节。但是本系列文章中,我将讨论从源代码到执行程序所涉及的许多幕后细节,因此我将首先探讨由编译器生成的二进制类。 二进制类格式实际上是由JVM规范定义的。通常这些类表示是由编译器从Java语言源代码生成的,而且它们通常存储在扩展名为.class的文件中。但是,这些特性都无关紧要。已经开发了可以使用Java二进制类格式的其它一些编程语言,而且出于某些目的,还构建了新的类表示,并被立即装入到运行中的JVM。就JVM而言,重要的部分不是源代码以及如何存储源代码,而是格式本身。 那么这个类格式实际看上去是什么样呢?清单1提供了一个(非常)简短的类的源代码,还附带了由编译器输出的类文件的部分十六进制显示: public class Hello public static void main(String args){ System.out.println(Hello,World!); 0000:cafe babe 0000 002e 001a 0a00 0600 0c09. 0010:000d 000e 0800 0f0a 0010 0011 0700 1207. 0020:0013 0100 063c 696e 6974 3e01 0003 2829.init.() 0030:5601 0004 436f 6465 0100 046d 6169 6e01 V.Code.main. 0040:0016 285b 4c6a 6176 612f 6c61 6e67 2f53.([Ljava/lang/S 0050:7472 696e 673b 2956 0c00 0700 0807 0014 tring;)V. 0060:0c00 1500 1601 000d 4865 6c6c 6f2c 2057.Hello,W 0070:6f72 6c64 2107 0017 0c00 1800 1901 0005 orld!. 0080:4865 6c6c 6f01 0010 6a61 7661 2f6c 616e Hello.java/lan 0090:672f 4f62 6a65 6374 0100 106a 6176 612f g/Object.java/ 00a0:6c61 6e67 2f53 7973 7465 6d01 0003 6f75 lang/System.ou 清单1显示的二进制类表示中首先是cafe babe特征符,它标识Java二进制类格式(并顺便作为一个永久的―但在很大程度上未被认识到的―礼物送给努力工作的barista,他们本着开发人员所具备的精神构建Java平台)。这个特征符恰好是一种验证一个数据块确实声明成Java类格式的一个实例的简单方法。任何Java二进制类(甚至是文件系统中没有出现的类)都需要以这四个字节作为开始。 该数据的其余部分不太吸引人。该特征符之后是一对类格式版本号(本例中,是由1.4.1 javac生成的次版本0和主版本46―用十六进制表示就是0x2e),接着是常量池中项的总数。项总数(本例中,是26,或0x001a)后面是实际的常量池数据。这里放着类定义所用的所有常量。它包括类名和方法

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档