Последовательный вызов функций в Java

Начинал знакомство с программированием с чтения учебника по С/С++. И там в теме "Функции" была такая информация:

"Каждая функция обладает собственным именем, и, когда оно встречается в программе, управление переходит к телу данной функции. Этот процесс называется вызовом функции (или обращением к функции). По возвращении из функции выполнение программы возобновляется со строки, следующей после вызова функции":

введите сюда описание изображения

Тот учебник я так и не дочитал до конца, переключился на язык Java, и с тех пор изучаю его и пишу на нём. И сейчас я подумал, что все неизвестные мне вещи в Java я воспринимаю так: "ну наверное по аналогии с С++ работает". Я правильно понимаю, что последовательный вызов методов в Java происходит аналогично языку С++ ? Я сейчас вот такую картинку нарисовал:

введите сюда описание изображения

Попробовал написать такой код на 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 по аналогии с С++ происходит. Странно, что учебниках по Java в явном виде это нигде не написано (ну или я не те учебники читал).


Ответы (1 шт):

Автор решения: Roman C

Из Википедии:

Сравнение Java и C++

Java и C++ — два известных объектно-ориентированных языка программирования. По многим показателям популярности языков эти два языка доминировали в разработке объектно-ориентированного и высокопроизводительного программного обеспечения большую часть 21-го века, и их часто сравнивают и противопоставляют напрямую. Синтаксис Java был основан на C/C++.

Порядок вызова методов в Java определяется последовательностью утверждений в потоке кода, разделенных друг с другом с помощью точки с запятой.

Утверждения потока управления

Утверждения внутри исходных файлов обычно выполняются сверху вниз в том порядке, в котором они появляются. Утверждения потока управления, однако, разбивают поток выполнения, используя принятие решений, циклы и ветвление, позволяя вашей программе условно выполнять определенные блоки кода. В коде используются утверждения принятия решений (if-then, if-then-else, switch), операторы циклов (for, while, do-while) и операторы ветвления (break, continue, return), поддерживаемые языком программирования Java.

Хотя, в Java вызов методов несколько отличается от C++. Поскольку утверждения вызовов методов транслируются в байт-код, приводя при этом в действие такие утверждения как invokestatic, invokevirtual, или invokeinterface.

Более подробно можно прочитать в статье:

Mastering the mechanics of Java method invocation

Программисты Java, которые только начинают изучать код на уровне JVM, могут быть удивлены, узнав, что вызовы методов Java на самом деле преобразуются в один из нескольких возможных байт-кодов формы invoke*: invokestatic, invokevirtual или invokeinterface.

→ Ссылка