您好 在我的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());
}
但它不起作用,我怎样才能在试试中显示它? 感谢
答案 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());
}
}