如何获取当前类中方法的名称

时间:2010-10-05 13:42:15

标签: java

您好 在我的java类Toto中,我有3个静态方法 我想知道当我使用其中一种方法时,如何在try catch块中获取并显示package.class.methode的名称? 我尝试过methodeA:

public static void methodeA(){

try{
system.out.println("I do something");

}
catch(Exception e){
system.out.println("failed" +e.getClass().getMethods().toString());
}

但它不起作用,我怎样才能在试试中显示它? 感谢

8 个答案:

答案 0 :(得分:3)

e.printStackTrace();

答案 1 :(得分:2)

e.getStackTrace()[0].getMethodName();

答案 2 :(得分:1)

e.printStackTrace(); - 将打印整个异常堆栈跟踪 - i.n.所有方法+行号。

答案 3 :(得分:1)

e.getStackTrace()[0] .getMethodName()

答案 4 :(得分:1)

您可以使用以下示例:

public class A 
{
    public static void main(String args[])
    {
        new A().intermediate();   
    }
    void intermediate() 
    {
        new A().exceptionGenerator();
    }
    void exceptionGenerator()
    {
      try
      {
         throw new Exception("Stack which list all calling methods and classes");
      }
      catch( Exception e )
      {
         System.out.println( "Class is :" + e.getStackTrace()[1].getClassName() + 
                             "Method is :" + e.getStackTrace()[1].getMethodName());

         System.out.println("Second level caller details:");
         System.out.println( "Class is :" + e.getStackTrace()[2].getClassName() + 
                             "Method is :" + e.getStackTrace()[2].getMethodName());

      }
   }
}

答案 5 :(得分:0)

您是否注意到您的例外堆栈跟踪中已有信息?

确实,Exception类提供了一个getStackTrace()方法,它返回一个StacktraceElement数组。这些元素中的每一个都为您提供了类名,方法名和其他一些细节。如果你找到三种方法中的一种,你可以做的就是查看这个数组,瞧!

但是,请注意,如果在代码上使用混淆器,检测方法名称可能会失败。

答案 6 :(得分:0)

首选方案.....

catch(Exception e) {
    e.printStackTrace();
}

或(不是明智的选择,因为你不知道抛出了什么异常,你没有打印堆栈跟踪元素)。

catch(Exception e) {
    System.out.println(e.getStackTrace()[0].getMethodName());
}

答案 7 :(得分:0)

如果抛出异常,则会影响您的表现。不需要抛出异常,

public class AppMain {

 public static void main(String[] args) {
   new AppMain().execute();
 }

 private void execute(){
   RuntimeException exception = new RuntimeException();
   StackTraceElement currentElement = exception.getStackTrace()[0];

   System.out.println(currentElement.getClassName());
   System.out.println(currentElement.getMethodName());
 }
}