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

news2025/1/16 14:15:05

字节码技术应用
字节码技术的应用场景包括但不限于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.coloradmin.cn/o/926617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Aircrack-ng进行无线网络破解

Aircrack-ng是一款流行的无线网络渗透测试工具,主要用于密码破解和网络分析。但是,请注意,仅在有合法授权的情况下使用这些工具。 以下是一个使用Aircrack-ng进行无线网络破解的示例,以及一些步骤和注意事项: 步骤&a…

2023年京东睡眠经济市场数据分析(京东商品数据)

如今,伴随快节奏的生活,越来越多的人饱受睡眠问题的影响。同时,伴随现代化的发展,睡眠障碍群体或许会达到新的体量,而日趋增加的失眠人群自然而然低催生了助眠产品的增长。随着人们对健康睡眠重视的程度不断提高&#…

Dubbo 开发入门

一、通过模板生成项目脚手架 Dubbo Initializer 可用来快速生成 Java 项目脚手架,帮助简化微服务项目搭建、基本配置、组件依赖管理等。 Initializer 仍在持续更新中,更多 Dubbo Feature 的支持将会陆续发布。 选择 Dubbo 版本 Initializer 将使用 dub…

05:TIM定时器功能------输入捕获功能

目录 1:简历 2:频率测量 3:主从触发模式 4:结构 A:输入捕获功能测频率 1:连接图 2:函数介绍 3:测周法 4 输入捕获模式基本结构 5:步骤 6:代码 B :PWMI模式测频率占空比 1: 连接图 2:PWMI模式的结构 3:函数介绍 4:步骤 5:代码 1:简历 IC(Input Capture…

JDBC概述

JDBC概述 核心JDBC组件 JDBC驱动程序连接声明结果集 常见JDBC用例 查询数据库查询数据库元数据更新数据库执行事务 JDBC组件交互图 JDBC API由以下核心部分组成: JDBC驱动程序连接声明结果集 有四个基本的JDBC用例,大多数JDBC工作都围绕这些用例发展…

微信小程序——van-field中的left-icon属性自定义

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

Spring 学习源码的基础 核心原理与核心概念

文章目录 核心原理AnnotationConfigApplicationContextIoC 容器加载流程Spring 中如何创建一个对象Bean 的创建过程 (生命周期)单例 原型推断构造方法依赖注入AOP 动态代理判断是否需要 AOP 的大致流程CGLib 做 AOP 的大致流程事务事务代理对象执行方法的流程事务注解排至失效的…

Docker安装并配置Node-Exporter

Linux下安装Docker请参考:Linux安装Docker Node-Exporter简介 Exporter是Prometheus的指标数据收集组件。它负责从目标Jobs收集数据,并把收集到的数据转换为Prometheus支持的时序数据格式。 和传统的指标数据收集组件不同的是,他只负责收集…

Linux的Man Page知识记录

Man(short for manual) Page是Unix和Linux操作系统中的一个重要文档,提供命令、函数、系统调用等的详细介绍和使用说明。它是以纯文本的形式出现,通常在终端(terminal)中使用man命令访问。Man Page按照章节…

语言、习俗与成功:海外网红营销的文化敏感性

随着全球互联网的普及和社交媒体的兴起,海外网红营销正成为越来越多品牌和企业的选择。然而,要在海外市场取得成功,单纯的翻译内容和机械式的推广已经远远不够,文化敏感性成为海外网红营销的关键。本文Nox聚星将深入探讨语言、习俗…

什么是Spring框架?Spring有什么优势?Spring核心模块有哪些?

简介 Spring 是一个以 IoC 和 AOP 为基础的Java EE轻量级开源框架,其目的是用于简化 Java 企业级应用的开发难度和开发周期。 广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。例如 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spr…

Unity编辑器扩展:提高效率与创造力的关键

Unity编辑器扩展:提高效率与创造力的关键 前言 一、理解Unity编辑器二、扩展Unity编辑器的意义三、扩展Unity编辑器的必要性四、Unity编辑器的扩展方式五、扩展Unity编辑器的步骤六、Unity编辑器扩展的应用案例七、总结 前言 Unity是一款广泛使用的游戏开发引擎&am…

管理三个层级,你是哪一层管理者?

大家好,我是老原。 “什么算是一个好的项目经理?” “我不知道自己现在的水平怎么样,有没有判断标准?” 其实这些问题的本质是:我想提升,该朝着哪个方向去努力? 很多人会说,能力…

Vinted、PoshMark、Carousell这些海外二手跨境电商平台如何运营?

相信大家都知道“闲鱼”,二手交易平台一般来说入驻成本低,运营操作简单,平台流量多,因此也非常适合小型卖家入驻。那么海外的“闲鱼”有哪些呢?如何运营? 小编为大家找到了国外热门这些平台,有…

【芯片设计封装与测试】芯片测试目的、方法、分类及案例

目录 1.芯片测试概述(目的、方法) 1.1.测试在芯片产业价值链上的位置 2.测试如何体现在设计的过程中 2.1.半导体测试定义与基本工作机制 2.2.半导体测试环节分类及对应设备 2.3.设计验证 3.测试的各种类型 3.1.抽样测试和生产全测 3.2.测试相关…

有什么react进阶的项目推荐的?

前言 整理了一些react相关的项目,可以选择自己需要的练习,希望对你有帮助~ 1.ant-design Star:87.1k 阿里开源的react项目,作为一个UI库,省去重复造轮子的时间 仓库地址:https://github.com/ant-design/…

PMP证书的正确打开方式 get✓

在职场竞争日益激烈的今天,拥有一项专业认证成为了许多人提升自身竞争力的必备条件。而作为项目管理领域的顶级认证,PMP证书备受关注。不过,很多人对于PMP证书的费用颇有顾虑。那么,PMP证书有什么补贴政策呢?下面就为大…

电脑重装+提升网速

https://www.douyin.com/user/self?modal_id7147216653720341767&showTabfavorite_collectionhttps://www.douyin.com/user/self?modal_id7147216653720341767&showTabfavorite_collection 零封有哈数的主页 - 抖音 (douyin.com)https://www.douyin.com/user/self?…

21. 合并两个有序链表(简单系列)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 [], l2 [] 输出:[] 示例 3: …

牛客python练习2

1 解析:赋值操作(aXX,ba),a,b指向同一内存空间。当a,b是不可变类型时,a变,a 值变,id变,但是b不变,b的id也不变;当a,b是可变类型时,a变…