如何在Java中从该方法中查找方法名?

如何在Java中从该方法中查找方法名?,java,methods,Java,Methods,我想知道是否有办法知道在运行时执行的方法名 例如,在private void doSomething(String s)方法中,我想知道我正在执行doSomething(String s)方法 System.out.println(new Exception().getStackTrace()[0].getMethodName()); 另请参见 自JDK1.5以来,您不需要异常来获取StackTrace, 您可以通过以下方式获得: 使用GetStackTrace()[1]获取调用方法的名称

我想知道是否有办法知道在运行时执行的方法名

例如,在
private void doSomething(String s)
方法中,我想知道我正在执行
doSomething(String s)
方法

System.out.println(new Exception().getStackTrace()[0].getMethodName());
另请参见


自JDK1.5以来,您不需要异常来获取StackTrace,
您可以通过以下方式获得:


使用GetStackTrace()[1]获取调用方法的名称。更有用一点:)@Daniel,这就是我们要的吗?请注意,1)不能保证stacktrace是准确的,2)这以前是一个非常昂贵的操作。在最近的JVM中应该更好,真的吗?何时可能出现不准确的堆栈跟踪?或者只是不能保证你会得到一个?我从来没有遇到过这些问题。我认为重要的是要明确这个解决方案只适用于JDK>=1.4和<1.5。对于JDK>=1.5,您不必每次都实例化一个新的
异常
,这节省了资源(请查看上面RealHowTo的答案)。这确实不是您的代码所需要的。我非常建议重新考虑你的设计,这样你就不需要它了。如果你在这个方法中,你已经知道它的名字了,对吗?:)如果您想知道调用方方法的名称,下面Jigar的答案就是您要寻找的答案。只需使用1而不是0作为索引。这是一个更好的解决方案,因为您不必创建异常来获取堆栈。不确定为什么这对我不起作用…它会使用Java 1为我打印“getStackTrace”。5@ZackMacomber,输出是什么:
StackTraceeElement[]ste=Thread.currentThread().getStackTrace();对于(StackTraceElement s:ste){System.out.println(s);}
,您使用的是Sun JRE吗?@RealHowTo-我可以使用“[2]”而不是“[1]”来获取方法名-我使用IBM的RSA,所以我想我可能使用的是IBM版本的Java。我正在尝试在android活动方法中打印方法名。我不得不使用
Thread.currentThread().getStackTrace()[2].getMethodName()
这不符合他的要求。看见
   public class Test2 {
     public static void main(String args[]) {
        new Test2().doit();
     }
     public void doit() {
        System.out.println(
           Thread.currentThread().getStackTrace()[1].getMethodName()); // output : doit
     }
   }
Method lastMethodCalled = this.getClass().getEnclosingMethod();