应该覆盖哪种异常方法?

时间:2014-04-02 18:21:05

标签: java

我有一个自己的异常,即InputException。

当它没有被捕获时,JVM会向控制台写入堆栈跟踪。

public static void main(String[] args) throws InputException{
    throw new InputException();
}

JVM写入控制台。

线程中的异常" main" InputException 在test.Main.main(Main.java:8)

如何更改此消息,InputException的哪个方法生成此stackTrace?

5 个答案:

答案 0 :(得分:3)

throw new InputException("your message here");

所以你必须在你的异常类中创建一个带有字符串参数调用super的构造函数:

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

控制台上打印的消息是getMessage()方法返回的消息,默认情况下返回传递给Throwable构造函数的消息。

答案 1 :(得分:2)

AFAIK无法更改Exception in thread [threadName] [className] at [codeLine]

相反,您可能希望捕获异常,处理它并将一些简洁的消息输出到控制台(或记录器)。

答案 2 :(得分:1)

重载InputException

的构造函数
public InputException(String message) {
    super(message);
}

然后使用它

throw new InputException("an input exception has occurred");

答案 3 :(得分:1)

JVM内部调用printStackTrace()方法(因为您没有覆盖它,因此将调用Throwable类实现。)
累计到Throwable#printStackTrace

  

第一行输出包含此对象的toString()方法的结果。剩余行表示以前通过方法fillInStackTrace()

记录的数据

如果您不想要这种表示,那么您可以在自定义异常类中覆盖printStackTrace()方法,否则您可以在创建其对象时将String消息作为构造函数参数传递。

答案 4 :(得分:0)

您可以使用应打印的消息重载Exception构造函数,例如

public InputException(String message) {
    super(message);
}

然后按如下方式抛出异常:

throw new InputException("message");

请查看Java documentation,告诉我们为什么要这样做。