ASM基础教程-方法

最后

各位读者,由于本篇幅度过长,为了避免影响阅读体验,下面我就大概概括了整理了

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

1 结构

===================================================================

在编译类的内部,方法的代码存储为一系列的字节码指令。

要生成和转换类,最根本的就是要了解这些指令,并理解它们是如何工作的。

本节将对这些指令进行全面概述,这些内容足以开始编写简单的类生成器与转换器代码。如需完整定义,应当阅读 Java 虚拟机规范。

1.1 执行模型


先来介绍 Java 虚拟机执行模型。

我们知道,Java 代码是在线程内部执行的。每个线程都有自己的执行栈,栈由帧组成。每个帧表示一个方法调用:

  • 每次调用一个方法时,会将一个新帧压入当前线程的执行栈

  • 当方法返回时,或者是正常返回,或者是因为异常返回,会将这个帧从执行栈中弹出,

  • 执行过程在发出调用的方法中继续进行(这个方法的帧现在位于栈的顶端)。

每一帧包括两部分:

  • 一个局部变量部分

  • 一个操作数栈部分

局部变量部分包含可根据索引

以随机顺序访问的变量。由名字可以看出,操作数栈部分是一个栈,其中包含了供字节代码指令

用作操作数的值。这意味着这个栈中的值只能按照“后入先出”顺序访问。不要将操作数栈和线

程的执行栈相混淆:执行栈中的每一帧都包含自己的操作数栈。

局部变量部分与操作数栈部分的大小取决于方法的代码。这一大小是在编译时计算的,并随

字节代码指令一起存储在已编译类中。因此,对于对应于某一给定方法调用的所有帧,其局部变

量与操作数栈部分的大小相同,但对应于不同方法的帧,这一大小可能不同。

一些基本示例,具体体会一下字节代码指令是如何工作的。考虑下面的 bean 类:

package pkg;

public class Bean {

private int f;

public int getF() {

return this.f;

}

public void setF(int f) {

this.f = f;

}

}

最后

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

image

image

其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣,

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

项目源码】](https://bbs.csdn.net/topics/618154847)收录**

需要这份系统化的资料的朋友,可以点击这里获取

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值