方法的调用流程:
- 方法没有被调用的时候,在方法区中的字节码文件中存放
- 方法被调用的时候,需要进入到栈内存中运行
这么直接说很难理解,那我们用代码演示一下,代码如下:
public class Demo2Method { public static void main(String[] args) { study(); } public static void sleep(){ System.out.println("睡觉"); } public static void eat(){ System.out.println("吃饭"); } public static void study(){ eat(); System.out.println("学习"); sleep(); } }
运行出的结果如图:
原理是如何的呢?不妨让我们看看内存图解。
首先需要在方法区里面加载class文件,产生了四个方法,但这四个方法并不是在方法区里面跑。
首先会将main方法提到栈里面,看到代码,main方法会去调用study方法,所以study就进来了。
而study代码的第一行调用了eat方法,就会把eat方法提取进来。
eat会输出“吃饭”
执行结束后又会退出去,然后回到study
study执行第二行代码,会输出“学习”,紧接着调用第三行代码sleep
引进来sleep方法后,就会执行打印语句“睡觉”
打印结束后,sleep又会离开栈内存
sleep退出去后,发现study也调用完了,也会退出去,紧接着main方法也会退出去。整个代码执行结束。
图解流程就是这样,结合代码一起看更好理解。