我通过阅读 C/C++ 教科书开始接触编程。在“功能”主题中有这样的信息:
“每个函数都有自己的名字,当在程序中遇到它时,控制权就传递给该函数的主体。这个过程称为函数调用(或函数调用)。当函数返回时,程序执行从函数调用后的行恢复”:
我一直没有读完那本教科书,而是转而使用 Java 语言,并一直用它来学习和写作。现在我认为我对 Java 中所有未知的东西的看法是:“好吧,它可能与 C++ 类似。”我是否正确理解了 Java 中的顺序方法调用与 C++ 中的顺序方法调用类似?我刚画了这张图:
我尝试用Java编写此代码:
public class Demo1 {
public static void main(String[] args) throws InterruptedException {
System.out.println("START main()");
funcOne();
funcTwo();
System.out.println("FINISH main()");
}
private static void funcOne() throws InterruptedException {
System.out.println(" Start funcOne()");
f_1_1();
f_1_2();
f_1_3();
System.out.println(" Finish funcOne()");
}
private static void funcTwo() throws InterruptedException {
System.out.println(" Start funcTwo()");
f_2_1();
f_2_2();
System.out.println(" Finish funcTwo()");
}
private static void f_1_1() throws InterruptedException {
System.out.println(" start f_1_1()");
Thread.sleep(1_000L);
System.out.println(" finish f_1_1()");
}
private static void f_1_2() throws InterruptedException {
System.out.println(" start f_1_2()");
Thread.sleep(2_000L);
System.out.println(" finish f_1_2()");
}
private static void f_1_3() throws InterruptedException {
System.out.println(" start f_1_3()");
Thread.sleep(3_000L);
System.out.println(" finish f_1_3()");
}
private static void f_2_1() throws InterruptedException {
System.out.println(" start f_2_1()");
Thread.sleep(4_000L);
System.out.println(" finish f_2_1()");
}
private static void f_2_2() throws InterruptedException {
System.out.println(" start f_2_2()");
Thread.sleep(5_000L);
System.out.println(" finish f_2_2()");
}
}
我在控制台中得到输出:
嗯,从各方面来看,Java 中方法的调用方式确实与 C++ 类似。奇怪的是,Java 教科书中没有任何地方明确写到这一点(或者也许我读错了教科书)。
来自维基百科:
Java中方法调用的顺序由代码流中的语句序列决定,各个语句之间用分号分隔。
尽管如此,在 Java 中,调用方法与 C++ 略有不同。因为方法调用断言被转换成字节码,所以这会导致诸如
invokestatic
、invokevirtual
或之类的断言invokeinterface
。您可以在文章中阅读更多内容: