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);

这两段代码在意义上有什么区别?第一段代码,如果只有当前类的话,不永远进不了第二个判断里面,这样有做的意义在哪里?

阅读 1.9k
1 个回答

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

第一段的逻辑用于查找最后一次调用FQCN方法的是谁。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题