package jiecheng;public class Factorial { public int returnN(int i){
System.out.println("the number is:"+i);
Throwable th=new Throwable();
StackTraceElement []traces=th.getStackTrace();
for(StackTraceElement trace:traces)
System.out.println(trace);
if(i>=0&&i<2)
return 1;
else
return i*returnN(i-1);
}

public static void main(String args[]){
Factorial f=new Factorial();
int m=f.returnN(3);
System.out.println("the result is :"+m);
}
}
执行的结果是:
the number is:3
jicheng.Factorial.returnN(Factorial.java:7)
jicheng.Factorial.main(Factorial.java:19)
the number is:2
jicheng.Factorial.returnN(Factorial.java:7)
jicheng.Factorial.returnN(Factorial.java:14)
jicheng.Factorial.main(Factorial.java:19)
the number is:1
jicheng.Factorial.returnN(Factorial.java:7)
jicheng.Factorial.returnN(Factorial.java:14)
jicheng.Factorial.returnN(Factorial.java:14)
jicheng.Factorial.main(Factorial.java:19)
the result is :6
我在看java核心技术是这样写到:
堆栈跟踪是个方法调用过程的列表,它包含程序执行中方法调用的特定位置,当java程序正常终止时,就会显示这个列表
StackTraceElement对象包含了文件名、当前执行的代码行号、类名和方法名的信息。
我想问的是:1.当前的方法是指哪个方法(用上面个的例子)?
2.java程序正常终止是否是当调用returnN(3)时,这个方法执行完再去执行renturnN(2)呢
调用returnN(3)时产生了2个StackTraceElement对象;
当执行到returnN(2)时产生了3个对象,都包含了main和returnN方法,
还有别的方法像println方法,怎么没有啊。
这里给我搞迷糊了,最好能帮我详细的解释下,谢谢了@!!