方法的执行过程

方法的执行过程

先看如下代码:

public static void main(String[] args){

int i = 1024;

m1(i);

System.out.println("monkey1024");

}

public static void m1(int i){

m2(i);

}

public static void m2(int i){

m3(i);

}

public static void m3(int i){

System.out.println("m3方法中的i=" + i);

}

public static void m4(){

}

方法执行图解

上图是方法执行过程图

将main方法压栈

因为main方法里面调用了m1方法,所以将m1方法压栈

m1方法调用m2方法,将m2方法压栈

m2方法调用m3方法,将m3方法压栈

m3方法执行结束后,开始弹栈

因为m4方法没有被调用,所以不会进行压栈操作。

原文地址:https://www.cnblogs.com/zkxinan/p/10469522.html

时间: 2024-08-30 00:53:59

方法的执行过程的相关文章

Main方法的执行过程(转)

要运行一个 main 方法 , 首先要知道 main 方法所在的 Class, 在命令行中指定这个 Class 名 Class Lava{ Private int speed = 4; Void flow(){ } } Class Volcano{ Public static void main(String[]  args){ Lava lava = new Lava(); lava.flow(); } } Java Lava 1.        当虚拟机接受到这样的命令后 , 就从 clas

【转载】Java中System.loadLibrary() 的执行过程

最近复习JNI,通过AndroidStudio导入源码一点点的跟踪分析so库的加载过程. 在网上发现有其他同学做了同样的工作,对比文章看起来更加轻松.感谢他们的工作!下面是其中比较好的一篇的转载. 原文链接:http://my.oschina.net/wolfcs/blog/129696 未经许可转载,如有侵权,请联系我删除. 目录[-] 系统的library path Native 层load library的过程 System.loadLibrary()是我们在使用Java的JNI机制时,会

Java中JIN机制及System.loadLibrary() 的执行过程

Android平台Native开发与JNI机制详解 http://mysuperbaby.iteye.com/blog/915425 个人认为下面这篇转载的文章写的很清晰很不错. 注意Android平台上的JNI机制使用包括Java代码中调用Native模块以及Native代码中调用Java模块. http://www.ophonesdn.com/article/show/263(misybing:很遗憾该站已经挂掉) 众所周知,OPhone平台上的应用开发主要基于Java语言,但平台完全支持且

Servlet的生命周期及执行过程

Servlet生命周期分为实例化.初始化.响应请求调用service()方法.消亡阶段调用destroy()方法. 执行过程如下: 1)当浏览器发送一个请求地址,tomcat会接收这个请求 2)tomcat会读取项目中的web.xml中的配置 3)当请求地址符合servlet-mapping标签映射的地址,会进入这个servlet 4)servlet首先会实例化(构造),然后初始化执行init()方法,init()方法至始至终执行一次,servlet对象是单实例 5)根据请求的方式是get或po

python函数得执行过程

对于 Python 常规函数,都只有一个入口,但会有多个出口如 return 返回或者抛出异常.函数从入口进入会一直运行到 return 语句或者抛出异常,中间不会暂停,函数一直拥有控制权.当运行结束,才将控制权还给调用者. 前文介绍过,当执行 Python 代码时,会先将代码编译成字节码,然后在虚拟机中解释执行字节码,编译好的字节码会保存在 .pyc 或 .pyd 扩展名的文件里.在运行时,虚拟机会创建字节码执行的上下文环境,Python 模拟 C 语言中的运行栈作为运行时的环境,使用PyFr

对基于JUnit和Ant的测试用例执行过程使用Kieker(AspectJ)进行监控的方法

这篇日志的目的从标题里可以看出来.这也是我们实验需要,必须总结一下,方便其他师弟师妹在这个基础上做实验. 我已经介绍了很多基于Kieker的监控方法,这里以Prefuse这个开源可视化Java框架为例,总结怎么基于JUnit和Ant实现对开源软件自带测试用例执行过程的监控.在这个链接中,选择最新的版本下载(Prefuse已经有些年头没更新了,不过这个框架确实还不错). 解压之后用Eclipse打开其build.xml,发现这个项目的build.xml结构还比较奇葩.如果运行ant all,可以生

iOS的过程方法与执行方法

过程方法与执行方法,官方没有这一说法,属个人总结. 按苹果 cocoa 命名规则,will表将要执行一个动作,内容是准备数据:should表一个动作方法执行前的许可,返回类型多为bool,did表确认行为,执行操作并给出结果. 从这里,可以理解为will为发起方法should类为过程方法,即走个过场,拿个验证(bool),因此,一些大的动作就不能在这类方法中执行.  Should就像钥匙, 当用钥匙开门,如果门好开,验证完,推下钥匙也能打开,类比在should中作些小动作也未尝不可,但如果动作过

一个C#程序的执行过程

可能很多人都知道我们把程序打包成dll就丢出去了,但是里面的具体的执行过程是怎么样的呢. 程序集是由元数据和IL组成的.IL是和CPU无关的语言,是微软的几个专家请教了外面的编译器的作则,开发出来的.IL比大多数机器语言都要高级一点.IL能够访问和操作对象类型,并提高了指令来初始化对象,调用对象上的虚方法以及直接操作数组元素. 比如下面这个例子 class Program { static void Main(string[] args) { Console.WriteLine("Hello&q

mysql(1)—— 详解一条sql语句的执行过程

SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL语句的底层实现不同罢了,但结果相同.这有点类似于java中接口的作用,一个接口可以有不同的实现类,不同的实现类对于接口中方法的实现方式可以不同,结果可以相同.这里SQL语言的作用就类似于java中的接口,数据库就类似于java中接口的实现类,SQL语句就类似于java接口中的方法.不同的是java中