Java中方法(函数)的调用机制

前言

继上一篇 Java中类和对象的分配机制 继续来讲方法的调用机制。


  1. 首先还是来一段简单的代码:
    就是主方法(main)中调用了一个 dog 对象的 GetSum 方法。
class Dog
{
	int age ;
	String name ;
	String color ;
	public int GetSum(int num1,int num2)
	{
		int res = num1 + num2;
		return res;
	}
	
}
public class test01
{
	 public static void main(String[] args)
	 {
		Dog dog = new Dog();
		int returnRes = dog.GetSum(1,1); 
		System.out.println("GetSum方法返回的值: "+returnRes);
	}
}
  1. 我们重点关注这几行:
    关注其方法在 JVM 内存中是如何调用的。

public int GetSum(int num1,int num2)
{
int res = num1 + num2;
return res;
}

public static void main(String[] args)
{
Dog dog = new Dog();
int returnRes = dog.GetSum(1,1);
System.out.println("GetSum方法返回的值: "+returnRes);
}

废话不多说,直接开干。

  • 首先程序都是从main方法入口开始执行的。这个时候,系统会在栈开辟一段空间给 main 方法。
  • 开始执行 Dog dog = new Dog(); 也就是加载Dog中的信息入堆,该语句执行结束。
  • 继续执行 int returnRes = dog.GetSum(1,1); 系统会判断这是GetSum(1,1)是一个方法调用。 所以会立马在栈空间开辟一份新的独立的空间用于执行GetSum 方法里面的内容;开辟好后,该方法调用的实参,也就是(1,1)会给 GetSum(int num1,int num2);里面的 num1,num2 按顺序赋值,相当于给形参 num1, num2 初始化
  • 此时执行的顺序就会从 int returnRes = dog.GetSum(1,1) (注意:这条语句还没执行结束);跳到 public int GetSum(int num1,int num2) 方法里面,开始执行 int res = num1 + num2;就是加两个数到res中。执行结束该语句。
  • 继续执行 return res; 这是一条返回语句,什么是返回呢,你可以这么理解,我们刚刚不是从 int returnRes = dog.GetSum(1,1) 这里 跳到了 public int GetSum(int num1,int num2) 这里执行吗?现在它看到了 return res;这条语句 有个 return ,它说它不干了,要回到 int returnRes = dog.GetSum(1,1) 这里执行,只是回来时候,带了一个东西回来,也就是带了返回值 res,并且 该方法 public int GetSum(int num1,int num2) 也销毁了,就是在内存中不存在了的意思。把原来的语句 int returnRes = dog.GetSum(1,1) 偷偷变成了 int returnRes = res; 之后就才算执行完 int returnRes = dog.GetSum(1,1) 这条语句,这条语句执行结束
  • 继续执行 System.out.println("GetSum方法返回的值: "+returnRes);就输出了 returnRes的值。
  • 继续执行 ,哎,发现下面没有语句可以执行了,那自然而然也就结束了。所以main函数也执行结束了,那么整个程序也就执行结束退出了。

下面我画了一个图给大家对着文字理解以下:
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呋喃吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值