本文讲述了Java asm教程——asm是什么!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:
简单来说,ASM是一个操作Java字节码的类库。为了能够更好的理解ASM是什么,我们需要来搞清楚两个问题:1、ASM的操作对象是什么呢?2、ASM是如何处理字节码(ByteCode)数据的呢?首先,我们来看第一个问题:ASM的操作对象是什么呢?
回答:ASM所操作的对象是字节码(ByteCode)数据。我们都知道,一个.java文件经过Java编译器(javac)编译之后会生成一个.class文件。在.class文件中,存储的是字节码(ByteCode)数据。
ASM所操作的对象就是字节码(ByteCode),而在许多情况下,字节码(ByteCode)的具体表现形式是.class文件。接着,我们来看第二个问题:ASM是如何处理字节码(ByteCode)数据的呢? 回答:ASM处理字节码(ByteCode)的方式是“拆分-修改-合并”。ASM处理字节码(ByteCode)数据的思路是这样的:第1步,将.class文件拆分成多个部分;第2步,对某一个部分的信息进行修改;第3步,将多个部分重新组成一个新的.class文件;在Wikipedia上,对ASM进行了如下描述:
ASM provides a simple API for decomposing(拆分), modifying(修改), and recomposing(重组) binary Java classes (i.e. ByteCode).
对于ASM的过去,主要说明三个问题:1、ASM从什么时候开始出现的?2、ASM的作者是谁?3、ASM的名字有什么含义?在2002年的时候,Eric Bruneton、Romain Lenglet和Thierry Coupaye发表了一篇文章,名为《ASM: a code manipulation tool to implement adaptable systems》。在这篇文章当中,他们提出了ASM的设计思路。一般来说,大写字母的组合,可能是多个单词的缩写形式,例如,JVM表示“Java Virtual Machine”。但是,ASM并不是多个单词的首字母缩写形式。在上面的文章中,记录了下面的话:
The ASM name does not mean anything: it is just a reference to the __asm__ keyword in C, which allows some functions to be implemented in assembly language.
对于ASM的现在,主要说明两个问题:1、ASM属于哪一个机构?2、ASM的Logo是什么样的?The ASM library is a project of the OW2 Consortium. OW2 is an independent, global, open-source software community.作为一个小故事,我们来说一下OW2组织是如何形成的。OW2组织的形成,与中国的一些大学和公司也有很大的关系(原文内容来自这里):2002年,ObjectWeb项目启动,它是由INRIA、Bull和France Telecom共同开发的项目,并形成了一个成熟的、开源软件社区。2004年,Orientware项目启动,由中国的北京大学、北航、国防科技大学、中创软件和中国科学院软件研究所共同研发。2005年,ObjectWeb和Orientware签署了一份协议,决定共享代码库,一起开发中间件软件。2006年,ObjectWeb和Orientware两个社区组织融合,形成了OW2组织。OW2组织名字,可能是由ObjectWeb和Orientware名称当中的两组O和W组合而来。ASM的Logo设计很有特点,它在旋转的过程中,会分别呈现出“A”、“S”和“M”这三个字母。
对于ASM版本的发展,我们要说明两点:1、Java语言在不断发展,那么,ASM版本也要不断发展来跟得上Java的发展。2、在选择ASM版本的时候,要注意它支持的Java版本,来确保兼容性。比如说,我们常用的Java版本是Java 8和Java 11。针对Java 8版本,我们需要使用ASM 5.0版本,就能正常工作。对于Java 11版本,我们需要使用ASM 7.0版本,就能正常工作。当然,我们可以尽量使用较高的ASM版本。
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
想高效系统的学习Java编程语言,推荐大家关注一个微信公众号:Java圈子。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Java入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!