в Java у нас есть стек, в котором все наши вызовы хранятся со значениями
, при первом вызове ваша программа будет хранить ссылку на стек при первом вызове со значением 2, поэтому мы можем сказать
public static void testMethod(2){
if(2 > 0){
Label A: testMethod(1); ==> this will trigger a call and our stack will refer to this line to coninue when the method ends
System.out.print("A");
testMethod(1);
System.out.print("B");
}
}
наша метка A будет выглядеть следующим образом, и вы должны знать, что у нас до сих пор нет печати
public static void testMethod(1){
if(1 > 0){
Label B: testMethod(0); ==> in this case we have a new method call, new stack reference and we wait for this method return so we continue to next line
System.out.print("A");
testMethod(0);
System.out.print("B");
}
}
если мы попытаемся посмотреть на стопку глазами, мы увидим, что
testMethod (2) ожидание в метке A ==> вызов TestMethod (1) ожидание в метке B вызов testMehod (0)
вы знаете, что 0 не больше 0, поэтому вы прекратите работу без обработки
это освободит метку B для перехода на следующую строку, где она напечатает A, затем вызов с нулевым значением, который ничего не будет делать, а затем напечатает B
вот наш первый AB
теперь он вернется к метке A и перейдет к следующей строке и напечатает A
у нас есть ABA, мы вспомним другой раз, когда testMethod1 мы знаем, что эта дорога напечатала AB, поэтому у нас будет
ABA + AB = ABAAB, затем вызов завершается изакончите, напечатав B и выйдите из вызова testMethod (2)
с печатью ABAABB