方法之间的调用

方法之间的调用

一个方法可以调用另一个方法,方法本身也可以被其他方法调用。通过方法之间的互相调用,可以将复杂的业务逻辑拆分成多个独立的小步骤,形成清晰的调用链。

示例代码

package V054;

public class Test {

    public static void main(String[] args) {
        getMoney();
    }

    public static void valid() {
        System.out.println("验证用户信息");
    }

    public static void check() {
        valid();
        System.out.println("查询金额");
    }

    public static void save() {
        System.out.println("存入金额");
    }

    public static void getMoney() {
        check();
        System.out.println("取钱金额");
    }

    public static void trance() {
        System.out.println("转账");
    }
}Code language: JavaScript (javascript)

调用链分析

以 main 方法中调用 getMoney() 为例,执行流程如下:

main()
  └── getMoney()
        └── check()
              ├── valid()      → 输出"验证用户信息"
              └── 输出"查询金额"
        └── 输出"取钱金额"Code language: JavaScript (javascript)

实际输出顺序:

验证用户信息
查询金额
取钱金额

方法调用关系图

方法调用了哪些方法
maingetMoney()
getMoneycheck()
checkvalid()
valid无(最底层)
save无(未被调用)
trance无(未被调用)

方法调用的特点

特点说明
独立栈帧每次方法调用都会在栈中开辟独立的栈帧,方法结束后释放
调用深度理论上无限制,但栈空间有限,过深会导致 StackOverflowError
单向调用被调用的方法不能直接返回数据给调用者以外的层级
可复用性valid() 被 check() 调用,也可被其他方法调用

递归调用(扩展)

方法也可以调用自身,称为递归。但需设置终止条件,否则会栈溢出:

public static void countDown(int n) {
    if (n <= 0) {
        return; // 终止条件
    }
    System.out.println(n);
    countDown(n - 1); // 调用自身
}Code language: JavaScript (javascript)

注意事项

要点说明
避免循环调用A 调用 B,B 又调用 A,无终止条件会导致栈溢出
方法未被调用定义了但未被调用的方法不会执行
调用顺序方法调用的顺序决定了执行顺序
栈溢出风险递归或深层嵌套调用需设置合理的终止条件

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注