关于代码方面论文范例,与代码动态生成技术提升Java程序灵活性相关毕业论文网

时间:2020-07-05 作者:admin
后台-系统-系统设置-扩展变量-(内容页告位1-手机版)

本论文是一篇关于代码方面毕业论文网,关于代码动态生成技术提升Java程序灵活性相关电大毕业论文范文。免费优秀的关于代码及方法及文件方面论文范文资料,适合代码论文写作的大学硕士及本科毕业论文开题报告范文和学术职称论文参考文献下载。

摘 要:代码动态生成是指在程序运行时根据实际情况即时生成需要的类代码.它可以提高程序的灵活性,已被用于很多应用架构、脚本语言的实现中.为帮助学生掌握代码动态生成技术,探讨了相关技术的实现方法、工具的应用和教学思路.

关 键 词:代码动态生成;Java虚拟机;Java类文件;Bytecode;ASM

中图分类号:TP311文献标志码:A文章编号:1006-8228(2013)05-07-03

UsingcodedynamicgenerationtoenhancetheflexibilityofJavaprograms

YanZhonglin

(Collegeofinformation,mechanicalandelectricalengineering,ShanghaiNormalUniversity,Shanghai200234,China)

Abstract:Codedynamicgenerationisdefinedasclasscodegeneratedinstantlyaccordingtotheactualneedswhentheprogramisrunning.Itenhancestheflexibilityoftheprogram,soithasbeenusedinmanyframeworkandscriptinglanguageimplementations.StudentswhoarefamiliarwithJava,JVMmechanismandJavaclassfilestructurewillmasterthistechniqueeasily.Itisbeneficialforthemtolearnnewconceptsandnewprogrammingmodelsbasedonthistechnology,whichhelpthembuildmoreefficient,flexibleandinnovativeapplicationprojects.Theimplementationmethods,toolsandteachingconsiderationsarediscussed.

Keywords:codedynamicgeneration;JVM;Javaclassfiles;Bytecode;ASM

0引言

Java程序是通过JVM(Java虚拟机)运行的,JVM屏蔽了底层硬件和操作系统的差异,提供了一个统一的处理平台.JVM根据类文件执行运算,类文件含有数据定义和处理代码,是Java程序的基本表示形式.程序中各个类文件分开存储,运行时按需装载链接,这一点和C++等其他语言不同.C++在编译时就组合所有类,形成一个完整的可运行文件,而Java要直到运行时才动态组合,完成链接.

通常,类文件是由编译器根据源文件自动生成,由JVM在运行时直接装载的.但这不是获得和使用它的惟一方法,某些情况下可以进行更巧妙的处理.比如在运行时绕过源文件直接生成需要的代码,或者在装载时直接修改类文件,即时改变它的行为,这就是类代码动态生成技术.

类代码动态生成技术需要直接在JVM的汇编语言——bytecode上展开工作.由于JVM模型和指令系统相对简单,类文件有定义明确的格式和语义,成员描述、与其他类的关联都基于符号引用,非常易于理解和修改,这都降低了直接处理它们的难度.这种类文件分开存储、按需装载的机制,也易于在运行时根据具体情况动态生成、替换某个特殊代码段.这使我们有了在运行时改变程序行为的“魔力”,可以突破Java的某些限制,完成它本来无法实现的任务.

例如,作为静态语言的Java,所有的域名、方法名都必须在编程时确定,有时这会限制程序的灵活性.虽然Java引入了“反射”机制以弥补此缺陷,但它的运行效率与正常代码相差很多,将它应用于高频执行的核心部分是不可接受的,这时就希望用即时生成的、可高效执行的代码进行替换.再比如,面向方面编程的实现需要在方法调用前后“编织”入横切操作,这可以在编译时进行,但如果能在运行时动态地插入这些代码,无疑更具灵活性.对象/关系映射也与此类似,需要能即时生成与关系数据库结构相对应的数据对象.这些都离不开代码动态生成技术.

为适应技术的发展潮流,许多学校都开设有关Java高端应用的课程,如JavaEE,若干轻型架构,一些新型脚本语言等,它们会引入许多新概念和编程模式,如AOP、IOC、ORM等.要使学生切实领会和掌握这些抽象而微妙的内容,只作表面上的介绍往往是不够的,应更深入地讲解内部实现机制,使学生知其然,也知其所以然.如果做一些核查,可以发现很多内容都离不开代码动态生成,比较著名的就有AspectJ、Hibernate、Spring、Clojure、Groovy、JRuby、Jython、Eclipse等.由此可见,动态代码生成已被相当普遍地使用了,可以认为它是未来Java高端项目开发的一种基本手段.因此,对现在的学生适当地普及这方面知识是很有必要的,这既可以使他们对Java特有的底层运行机制有更深入的理解,又可以帮助掌握许多现在流行的热门技术,更重要的是为他们将来自己进行创新开发打下基础.

要掌握这门技术,需要了解JVM的运行机制,这看起来比较困难,但由于Java是一个经过认真设计、非常理想化的平台,相关内容从总体上说还是易于理解和掌握的.经过对讲授内容的规划、斟酌,通常使用少量课时就能让学生对此有较清晰的理解.接下来我们对相关的知识点和教学问题进行探讨.1了解类文件格式

代码动态生成技术要直接构造可装载执行的类文件,因此首先必须清楚Java类文件的格式.它有非常明确的定义[1](见图1),除了文件头部以外,还有以下各部分.

⑴类型和接口部分:说明类的名字、访问控制、父类以及所实现的所有接口.

⑵数据域池:罗列了该类本身定义的所有数据成员,说明了各自的名字、访问控制、类型、初始值等属性.

⑶方法域池:是它自身所有方法的集合,详细描述了每个方法的名字、调用限制、参数类型、返回值、抛出异常、执行代码等属性.

⑷类属性池:列出类相关的属性,如源文件名等.整个文件中还有多处可出现各种属性,用于表示各类专门信息.Java已定义了20种属性,用户也可以引入自己需要的新属性.其中Annotation属性比较值得关注,它用于支持各种元编程,结合这里介绍的代码动态生成技术,可以实现各种特殊功能.

⑸常量池:包含了所有常量,类名、域名、方法名等各种命名串,以及描述它们类型等属性的描述串,对其他类的引用信息也在其中.常量共有14种类型,信息都用数字和字符表示,其他部分通过索引使用它们.

⑹方法的“code”属性的格式:它提供对应方法的bytecode代码,try/catch块位置,运行时操作栈和局部变量区等信息.类文件格式见图1.

[类文件格式{/*u1u2u4为使用的字节数*/

类文件标记:u40XCAFEBABE

JDK版本:u2子版本号;u2主版本号

常量池:u2常量池项数;[常量信息]*

类型及接口:u2访问标志;u2本类索引;u2父类索引;u2接口项数;[u2接口索引]*

数据域池:u2数据域项数;[数据信息]*

方法域池:u2方法域项数;[方法信息]*

类属性池:u2类属性项数;[类属性信息]*

}

数据信息{

命名及描述:u2访问标志;u2数据名索引;u2数据描述串索引;

数据属性池:u2数据属性项数;[数据属性信息]*

}

方法信息{

命名及描述:u2访问标志;u2方法名索引;u2方法描述串索引;

方法属性池:u2方法属性项数;[方法属性信息]*

}

属性信息{u2属性名索引;u4属性叙述长度;属性叙述}

常量信息{u1常量类型号;常量叙述}

Code信息{

运行帧:u2操作堆栈区大小;u2局部变量区大小;

代码块:u4代码块长度;[bytecode代码]*

异常处理池:u2处理块项数;[u2起始点;u2终止点;u2处理点;u2异常类型]*

代码属性池:u2代码属性项数;[代码属性信息]*

}]

图1类文件格式

类文件结构虽然有点复杂,但学生只需粗略了解,使用后面介绍的ASM进行处理,内部细节是可以忽略&

1 2 3

关于代码方面论文范例,与代码动态生成技术提升Java程序灵活性相关毕业论文网参考文献资料:

自考本科什么专业好

函授本科论文范文

本科毕业生论文

本科自考科目

行政本科论文

自考本科论文答辩成绩查询

函授本科院校

自考园林本科

自考本科资格

本科结业 自考本科

后台-系统-系统设置-扩展变量-(内容页告位2-手机版)
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:123456789@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。
后台-系统-系统设置-扩展变量-(内容页告位3-手机版)