当前位置: 首页 > news >正文

java八股文面试[java基础]——字节码

字节码技术应用
字节码技术的应用场景包括但不限于AOP,动态生成代码,接下来讲一下字节码技术相关的第三方类库,第三方框架的讲解是为了帮助大家了解字节码技术的应用方向,文档并没有对框架机制进行详细分析,有兴趣的可以去了解相关框架实现原理和架构,也可以后续为大家奉上相关详细讲解。

ASM
ASM 是一个 Java 字节码操控框架,它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。

说白了,ASM可以在不修改Java源码文件的情况下,直接对Class文件进行修改,改变或增强原有类功能。

在熟悉了字节码原理的情况下,理解动态修改字节码技术会更加容易

接下来我们只针对ASM框架中几个主要类进行分析,并举个栗子帮助大家理解。

主要类介绍

ClassVisitor

提供各种对字节码操作的方法,包括对属性、方法、注解等内容的修改:

ClassWriter

主要功能就是记录所有字节码相关字段,并提供转换为字节数组的方法:

ClassReader Opcodes

ASM除了可以动态生成新的Class文件,还可以修改原有Class文件的功能或者在原Class文件新增方法字段等,这里不再举例子,有兴趣的可以自己研究一下。不过大家已经发现,使用ASM动态修改Class文件,难度还是有的,需要使用者对JVM指令、Class格式相当熟悉,

除了ASM,还有其他第三方工具也提供了对字节码的动态修改,包括CGLib,Javassisit,AspectJ等,而这些框架相比于ASM,则是将JVM指令级别的编码封装起来,让使用者直接使用Java代码编辑,使用更加方便。

引申
既然JVM运行时识别的只是.class文件,而文件格式我们也了解,那是不是只要我们能够正确生成.class文件就可以直接运行,甚至可以不用Java语言?

答案大家肯定都知道了,当然可以。Kotlin,Scala,Groovy,Jython,JRuby…这些都是基于JVM的编程语言。

那如果我们想自己实现一款基于JVM的开发语言,怎么搞?

定义语义,静态,动态?,强类型,弱类型?…
定义语法,关键字(if,else,break,return…)
定义代码编译器,如何将自己的代码编译成.class

知识来源:

【基础】什么是字节码,作用是什么_哔哩哔哩_bilibili

字节码详解_封何的博客-CSDN博客

http://www.lryc.cn/news/143789.html

相关文章:

  • 新能源汽车技术的最新进展和未来趋势
  • 知虾shopee数据分析工具:shopee出单的商机利器
  • python——ydata-profiling介绍与使用
  • (纯c)数据结构之------>链表(详解)
  • postman接口自动化测试框架实战!
  • Apache Doris 入门教程35:多源数据目录
  • 响应式web-PC端web与移动端web(H5)兼容适配 选型方案
  • Redis持久化之RDB解读
  • 四维图新 minemap实现地图漫游效果
  • centos7安装MySQL8
  • 【IMX6ULL驱动开发学习】10.Linux I2C驱动实战:AT24C02驱动设计流程
  • 【C++】详解声明和定义
  • 掌握C/C++协程编程,轻松驾驭并发编程世界
  • MyBatis-Plus的分页配置类
  • 排序算法-选择排序(Java)
  • SpringBoot 怎么返回html界面
  • watch computed 和 method
  • 数据结构,线性表有哪些
  • 服务间通过Feign相互调用报错,参数是MultiparFile、参数是POJO报错
  • Flutter系列文章-Flutter应用优化
  • opencv案例03 -基于OpenCV实现二维码生成,发现,定位,识别
  • 叠螺式污泥脱水机的要点及价格分析
  • Visual Studio中Linux开发头文件intellisense问题的解决办法
  • 如何以CPU方式启动Stable Diffusion WebUI?
  • HTTP 框架修炼之道 | 青训营
  • 【活动】怎么维护电脑?
  • Linux安装Docker
  • 极氪汽车的云资源治理细探
  • 设计模式之抽象工厂
  • 问道管理:数字经济概念走势强劲,竞业达、久其软件等涨停,观想科技等大涨