zoukankan      html  css  js  c++  java
  • 分析堆栈跟踪元素

    package com.tsjt.exception.stack;
    
    import java.util.Scanner;
    
    public class StackTraceTest {
        
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            System.out.print("Enter n: ");
            int n = in.nextInt();
            factorial(n);
        }
        
        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;
        }
    
    }

    通过eclipse控制台输入
     

    Enter n: 1
    factorial(1):
    com.tsjt.exception.stack.StackTraceTest.factorial(StackTraceTest.java:17)
    com.tsjt.exception.stack.StackTraceTest.main(StackTraceTest.java:11)
    return 1
    

     通过结果我们来看下堆栈跟踪顺序

    com.tsjt.exception.stack.StackTraceTest.factorial(StackTraceTest.java:17)
    com.tsjt.exception.stack.StackTraceTest.main(StackTraceTest.java:11)
    

    上面两行控制台结果是通过下面代码输出的。

    Throwable t = new Throwable();
    		StackTraceElement[] frames = t.getStackTrace();
    		for (StackTraceElement f : frames) {
    			System.out.println(f);
    		}

    我们看下为什么看能输出这两行代码呢?请看下图就明白了。

    总结:通过分析堆栈跟踪元素可以看出异常对象Throwable可以得出StackTraceElement[] frames = t.getStackTrace();

    而StackTraceElement这对象可以得出:

                   堆栈所在的对象类路径   declaringClass "com.tsjt.exception.stack.StackTraceTest"    

                   堆栈所在的文件名  fileName "StackTraceTest.java"

                   堆栈跟踪的代码行数 lineNumber 17 

                    堆栈所调用的方法名 methodName "factorial"

    通过这些我们可以看出把异常对象Throwable运用好对我们系统bug出现的位置很清晰对开发维护成本可以提高。

  • 相关阅读:
    Java位运算总结-leetcode题目
    【Java心得总结七】Java容器下——Map
    【Java心得总结六】Java容器中——Collection
    【Java心得总结五】Java容器上——容器初探
    【Java心得总结四】Java泛型下——万恶的擦除
    【Java心得总结三】Java泛型上——初识泛型
    【Java心得总结二】浅谈Java中的异常
    Opencv摄像头实时人脸识别
    【Java心得总结一】Java基本类型和包装类型解析
    Opencv VideoCapture实时捕捉摄像头信息
  • 原文地址:https://www.cnblogs.com/fofawubian/p/3360554.html
Copyright © 2011-2022 走看看