繁体   English   中英

Java调用方法

[英]Java Calling a Method

是否有可能如何动态地知道哪个方法调用另一个方法?

见下文:

class a {
       public void one(){
          System.out.println(methodWhoCallsVoidOne().getName());
        }

       public void two(){
          this.one();
       }
 }

并非没有创造异常并从异常中拉出堆栈跟踪的机会。

我会问你为什么要这样做? 过去,人们曾问过这个问题,几乎总是表明某个地方的设计不好。

或者您可以使用Thread.currentThread().getStackTrace()

您可以获得堆栈跟踪:

new Throwable().getStackTrace()

它从第一个返回所有调用者的数组。

如果使用的是Eclipse之类的IDE,则可以放置一个断点并查看调用堆栈。 Quck谷歌搜索Java调用堆栈上,出现了这个

public class WhoCalledMe {
 public static void main(String[] args) {
  f();
 }

 public static void f() {
     g();
 }

 public static void g() {
     showCallStack();
     System.out.println();
     System.out.println("g() was called by "+whoCalledMe());
 }

 public static String whoCalledMe() {
     StackTraceElement[] stackTraceElements =
     Thread.currentThread().getStackTrace();
     StackTraceElement caller = stackTraceElements[4];
     String classname = caller.getClassName();
     String methodName = caller.getMethodName();
     int lineNumber = caller.getLineNumber();
     return classname+"."+methodName+":"+lineNumber;
 }

 public static void showCallStack() {
     StackTraceElement[] stackTraceElements =
     Thread.currentThread().getStackTrace();
     for (int i=2 ; i<stackTraceElements.length; i++) {
          StackTraceElement ste = stackTraceElements[i];
          String classname = ste.getClassName();
          String methodName = ste.getMethodName();
          int lineNumber = ste.getLineNumber();
          System.out.println(classname+"."+methodName+":"+lineNumber);
     }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM