另一个带有程序解释的答案..
class TryFinallyDemo
{
static int counter;
public static void main(String s[])
{
int localCounter=0;
String v[] = new String[2];
try{
counter++;
localCounter = counter;
main(v);
System.out.println(5/0);
}
catch(Exception e) // or (ArithmeticException e)
{
System.out.println(e); // Java.lang.ArithmeticException: / by zero
}
finally{ System.out.println("AAAA.. Local Counter is " + localCounter); }
System.out.println("after finally normal execution");
}
}
这个例子清楚地展示了一旦抛出 StackOverflow 错误,堆栈是如何从下到上回调的。
输出片段:
AAAA.. Local Counter is 47
AAAA.. Local Counter is 46
AAAA.. Local Counter is 45
AAAA.. Local Counter is 44
AAAA.. Local Counter is 43
AAAA.. Local Counter is 42
AAAA.. Local Counter is 41
AAAA.. Local Counter is 40
AAAA.. Local Counter is 39
AAAA.. Local Counter is 38
AAAA.. Local Counter is 37
AAAA.. Local Counter is 36
AAAA.. Local Counter is 35
AAAA.. Local Counter is 34
AAAA.. Local Counter is 33
AAAA.. Local Counter is 32
AAAA.. Local Counter is 31
AAAA.. Local Counter is 30
AAAA.. Local Counter is 29
AAAA.. Local Counter is 28
AAAA.. Local Counter is 27
AAAA.. Local Counter is 26
AAAA.. Local Counter is 25
AAAA.. Local Counter is 24
AAAA.. Local Counter is 23
AAAA.. Local Counter is 22
AAAA.. Local Counter is 21
AAAA.. Local Counter is 20
AAAA.. Local Counter is 19
AAAA.. Local Counter is 18
AAAA.. Local Counter is 17
AAAA.. Local Counter is 16
AAAA.. Local Counter is 15
AAAA.. Local Counter is 14
AAAA.. Local Counter is 13
AAAA.. Local Counter is 12
AAAA.. Local Counter is 11
AAAA.. Local Counter is 10
AAAA.. Local Counter is 9
AAAA.. Local Counter is 8
AAAA.. Local Counter is 7
AAAA.. Local Counter is 6
AAAA.. Local Counter is 5
AAAA.. Local Counter is 4
AAAA.. Local Counter is 3
AAAA.. Local Counter is 2
AAAA.. Local Counter is 1
Exception in thread "main" java.lang.StackOverflowError
at java.lang.String.indexOf(String.java:1395)