import java.util.*;
public class StackTraceTest
{
        public static int factorial(int n)
        {
                System.out.println ("factorial("+ n +"):");
                Throwable t=new Throwable();
                StackTraceElement[] frames=t.getStackTrace();
                for(StackTraceElement f:frames)
                        System.out.println (f);
                        int r;
                        if(n<=1)
                                r=1;
                        else
                                r=n*factorial(n-1);
                                System.out.println ("return"+r);
                                return r;        
                        
        }
        public static void main (String[] args) 
        {
                Scanner in =new Scanner(System.in);
                System.out.println ("shuru:");
                int n=in.nextInt();
                factorial(n);
    }
                
}谁能告诉我这个代码是什么 意思  最好每行加上注释上我理解。  真的不懂
谢谢大家  或者加我的QQ48187537

解决方案 »

  1.   


    JDK解释,其它的就是for循环输出. new的那个对象是干什么的没代码没法说.getStackTrace
    public StackTraceElement[] getStackTrace()返回一个表示该线程堆栈转储的堆栈跟踪元素数组。如果该线程尚未启动或已经终止,则该方法将返回一个零长度数组。如果返回的数组不是零长度的,则其第一个元素代表堆栈顶,它是该序列中最新的方法调用。最后一个元素代表堆栈底,是该序列中最旧的方法调用。 
    如果有安全管理器,并且该线程不是当前线程,则通过 RuntimePermission("getStackTrace") 权限调用安全管理器的 checkPermission 方法,查看是否可以获得堆栈跟踪。 某些虚拟机在某些情况下可能会从堆栈跟踪中省略一个或多个堆栈帧。在极端情况下,没有该线程堆栈跟踪信息的虚拟机可以从该方法返回一个零长度数组。 
    返回:
    StackTraceElement 数组,每个数组代表一个堆栈帧。 
    抛出: 
    SecurityException - 如果安全管理器存在,并且其 checkPermission 方法不允许获得线程的堆栈跟踪。
    从以下版本开始: 
    1.5 
    另请参见: