鍍金池/ 問答/Java  Linux/ Java棧信息

Java棧信息

private static final String FQCN = Util.class.getName();

StackTraceElement[] stack = new Throwable().getStackTrace();
String sourceClassName = null;
String sourceMethodName = null;
boolean found = false;
for (StackTraceElement element : stack) {
    String className = element.getClassName();
    if (FQCN.equals(className)) {
        found = true;
    } else if (found) {
        sourceClassName = className;
        sourceMethodName = element.getMethodName();
        break;
    }
}
setSourceClassName(sourceClassName);
setSourceMethodName(sourceMethodName);

StackTraceElement[] stack = new Throwable().getStackTrace();
String sourceClassName = null;
String sourceMethodName = null;
for (StackTraceElement element : stack) {
    String className = element.getClassName();
    if (FQCN.equals(className)) {
        sourceClassName = className;
        sourceMethodName = element.getMethodName();
        break;
    }
}
setSourceClassName(sourceClassName);
setSourceMethodName(sourceMethodName);

這兩段代碼在意義上有什么區(qū)別?第一段代碼,如果只有當(dāng)前類的話,不永遠進不了第二個判斷里面,這樣有做的意義在哪里?

回答
編輯回答
嘟尛嘴

第一段是找FQCN的下一個StackTraceElement的class,
第二段是找FQCN的class。

第一段的邏輯用于查找最后一次調(diào)用FQCN方法的是誰。

2017年7月29日 02:18