Java:在Exception消息中编写StackTrace信息

时间:2012-03-12 13:32:00

标签: java exception

我想使用OtherException扩展Exception类,并在消息字段中写入throw类和方法的名称。除了使用父构造函数设置消息之外,我看不到任何其他方法,但是我不能在super的参数中使用像getStackTrace这样的方法。任何解决方法?或者有人知道为什么不能这样做吗?

这是我想要的功能:

public OtherException(final String message) {
    super(message + getStackTrace()[0].getClassName()+" "+getStackTrace()[0].getMethodName());
}

但它在Java中不起作用。

这有效:

public OtherException(final String message) {
    super(message + " class: " + Thread.currentThread().getStackTrace()[2].getClassName() + ", method: "
            + Thread.currentThread().getStackTrace()[2].getMethodName());
}

也许有人知道更优雅的东西?

2 个答案:

答案 0 :(得分:0)

据我所知,您希望将异常抛出的方法名称作为异常消息,不是吗? 在这种情况下,您的实现是可以的,只是我将它放入您的异常的默认构造函数中:

public OtherException() {
    super(getStackTrace()[0].getClassName()+" "+getStackTrace()[0].getMethodName());
}

实际上,你没有在构造函数中使用message参数,所以它没用。如果覆盖默认构造函数,您仍然可以实现其他构造函数,这些构造函数将接受消息并将其传递给super,通常人们在创建自定义异常时会这样做。

答案 1 :(得分:0)

通常,您将在堆栈跟踪的异常中使用堆栈跟踪。

public class OtherException extends Exception {
    public OtherException(final String message) {
        super(message);
    }
}

OtherException oe = new OtherException("Hello");
StackTraceElement[] stes = oe.getStackTrace(); // get stack trace.

在创建Exception时记录堆栈信息。实际的StackTraceElement []是在第一次使用时创建的。