方法调用的执行过程
调用方法—**>传递参数—>找到方法地址—>执行被调方法的方法体—>被调方法结束返回—>**回到主调方法继续往下执行
注:
- 定义方法时不会执行方法代码,调用是执行
- 一个方法可被多次调用
事例:计算1!+2!+3!
public class Text{
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <=3; i++) {
sum += fac(i);
}
System.out.println("sum = " + sum);
//调用方法
public static int fac(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
System.out.println("计算 n 的阶乘中"+n+"! = " + result);
return result;
}
}
形参和实参
形参是在定义函数名和函数体的时候使用的参数。
实参是在调用时传递给函数的参数,即传递给被调用函数的值。
举例说明
3X + 2Y =5Z当X=48,Y=22,求Z? 其中X,Y,Z就是形参。48,22就是实参。
方法重载
- 为什么要重载
重载的意义在于扩展父类的功能,如果有两个类A和B,继承C,那么在C的方法只需要定义A和B相同的功能,而在各个子类中扩展子类具体的实现。 - 在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了;编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法 。
- 重载函数用来实现功能类似而所处理的数据类型不同的问题。
1.函数重载的要求
- 方法名必须相同
- 参数列表必须不同(参数的个数不同/参数的类型不同/类型的次序必须不同)
- 与返回值类型是否相同无关,两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的
public class Text {
public static void main(String[] args) {
add(1, 2); // 调用add(int, int)
add(1.5, 2.5); // 调用add(double, double)
add(1.5, 2.5, 3.5); // 调用add(double, double, double)
}
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static double add(double x, double y, double z) {
return x + y + z;
}
}
递归
一个方法在执行过程中调用自身, 就称为 “递归”。
递归的必要条件:
- 将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同
- 递归出口
(通常子问题解决,原问题也迎刃而解)
调用栈
方法调用的时候, 会有一个 “栈” 这样的内存空间描述当前的调用关系. 称为调用栈.
每一次的方法调用就称为一个 “栈帧”, 每个栈帧中包含了这次调用的参数是哪些, 返回到哪里继续执行等信息.