Последовательный вызов функций в 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 шт):
Из Википедии:
Сравнение 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
.