Dalam upaya memberikan bukti yang masuk akal bahwa AKAN ini pada akhirnya akan berakhir, saya menawarkan kode yang agak tidak berarti berikut ini. Catatan: Java BUKAN bahasa saya, oleh imajinasi yang paling jelas. Saya mengajukan hal ini hanya untuk mendukung jawaban Petrus, yang merupakan satu jawaban yang benar untuk pertanyaan itu.
Upaya ini untuk mensimulasikan kondisi dari apa yang terjadi ketika suatu pemanggilan TIDAK dapat terjadi karena itu akan menyebabkan stack overflow. Bagi saya, hal tersulit yang gagal dipahami orang adalah bahwa permohonan itu tidak terjadi ketika itu tidak dapat terjadi.
public class Main
{
public static void main(String[] args)
{
try
{ // invoke foo() with a simulated call depth
Main.foo(1,5);
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
public static void foo(int n, int limit) throws Exception
{
try
{ // simulate a depth limited call stack
System.out.println(n + " - Try");
if (n < limit)
foo(n+1,limit);
else
throw new Exception("StackOverflow@try("+n+")");
}
finally
{
System.out.println(n + " - Finally");
if (n < limit)
foo(n+1,limit);
else
throw new Exception("StackOverflow@finally("+n+")");
}
}
}
Keluaran dari tumpukan kecil goo yang tidak berguna ini adalah sebagai berikut, dan pengecualian aktual yang ditangkap mungkin mengejutkan; Oh, dan 32 percobaan panggilan (2 ^ 5), yang sepenuhnya diharapkan:
1 - Try
2 - Try
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
2 - Finally
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
1 - Finally
2 - Try
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
2 - Finally
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
java.lang.Exception: StackOverflow@finally(5)
finally
klausa akan merambat ke tingkat berikutnya. Tapi jangan menahan nafas; jumlah langkah yang diambil akan sekitar 2 sampai (kedalaman tumpukan maksimum) dan melempar pengecualian juga tidak murah.