Java 打印异常原因

Java 打印异常原因,java,Java,我正在编写一个Java程序,我有一行代码需要一个try…catch语句。问题是,代码行总是落在语句的catch部分。我不知道问题的原因或原因,因此我想将错误内容打印到屏幕上,以便我可以尝试跟踪问题。我该怎么做?我可以试试System.out.println(e)其中e是Exception类型的变量吗?您可以试试: try { . . . } catch (Exception e) { e.printStackTrace(); } 编辑(动机:如果异常可能是次要异常(由于另一个异

我正在编写一个Java程序,我有一行代码需要一个
try…catch
语句。问题是,代码行总是落在语句的
catch
部分。我不知道问题的原因或原因,因此我想将错误内容打印到屏幕上,以便我可以尝试跟踪问题。我该怎么做?我可以试试
System.out.println(e)
其中
e
Exception
类型的变量吗?

您可以试试:

try {
    . . .
} catch (Exception e) {
    e.printStackTrace();
}
编辑(动机:如果异常可能是次要异常(由于另一个异常而引发的异常),则可以执行更详细的版本:

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

    for (Throwable t = e.getCause(); t != null; t = t.getCause()) {
        System.err.println("Caused by:")
        t.printStackTrace();
    }
}
您可以尝试:

try {
    . . .
} catch (Exception e) {
    e.printStackTrace();
}
编辑(动机:如果异常可能是次要异常(由于另一个异常而引发的异常),则可以执行更详细的版本:

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

    for (Throwable t = e.getCause(); t != null; t = t.getCause()) {
        System.err.println("Caused by:")
        t.printStackTrace();
    }
}

getMessage
方法包含一条描述异常的消息:

try {
    // ...
} catch (Exception e) {
    System.out.println(e.getMessage());
}
在算术异常的情况下,输出可以是:
除以零

您也可以尝试:

try {
    // ...
} catch (Exception e) {
    e.printStackTrace();
}
产出可以是:

java.lang.ArithmeticException: Divided by zero
at javaapplication27.Test1.test(Test1.java:27)
at javaapplication27.Test1.main(Test1.java:19)

e.getMessage()
将更适合向最终用户显示,而
e.printStackTrace()
将更适合开发人员或放入日志文件。
getMessage
方法包含描述异常的消息:

try {
    // ...
} catch (Exception e) {
    System.out.println(e.getMessage());
}
在算术异常的情况下,输出可以是:
除以零

您也可以尝试:

try {
    // ...
} catch (Exception e) {
    e.printStackTrace();
}
产出可以是:

java.lang.ArithmeticException: Divided by zero
at javaapplication27.Test1.test(Test1.java:27)
at javaapplication27.Test1.main(Test1.java:19)


e.getMessage()
将更适合向最终用户显示,而
e.printStackTrace()
将更适合开发人员,或放入日志文件。

System.out.println(e);
@codennija-不太适合。它显示异常类型和异常消息(如果有),但不打印堆栈跟踪,这是有价值的诊断信息。这与Sladvak的
e.getMessage();
?@DavidB-它打印整个堆栈跟踪(包括消息,如果有的话),而不仅仅是消息。(另外,它首先在这里。)@TedHopp坦克!这就是我要找的!或者
System.out.println(e);
@codenninja-不是真的。它显示异常类型和异常消息(如果有),但不打印堆栈跟踪,这是有价值的诊断信息。这与Sladvak的
e.getMessage()有什么区别;
?@DavidB-它打印整个堆栈跟踪(包括消息,如果有的话),而不仅仅是消息。(另外,它首先出现在这里。:)@TedHopp Tanks!这就是我要找的!这和
e.printStackTrace()有什么区别
getMessage
是每个异常类继承的可丢弃类(Java所有异常的超类)的方法。它将只打印包含在异常中的消息。例如,对于
算术异常
,对于零除法异常,可以将消息“除以零”
printStartTrace
将显示指向此异常的完整代码堆栈,这是不有用的,因为您可能希望向最终用户显示此消息,最终用户不知道堆栈跟踪是什么,但会理解“除以零”的句子。谢谢。我不是在寻找用户友好的东西,而是我自己的程序员友好的东西。就程序现在的形状而言,除非我解决了这个异常问题,否则它将无法工作。@slaadvak-堆栈跟踪是“无用的东西”——真的吗?!从OP的问题:“我想将错误的内容打印到屏幕上,以便我可以尝试跟踪问题”在向最终用户显示此问题时,它可能没有用处,或者过于冗长。但是对于调试来说,这是一条路。这和
e.printStackTrace()有什么区别
getMessage
是每个异常类继承的可丢弃类(Java所有异常的超类)的方法。它将只打印包含在异常中的消息。例如,对于
算术异常
,对于零除法异常,可以将消息“除以零”
printStartTrace
将显示指向此异常的完整代码堆栈,这是不有用的,因为您可能希望向最终用户显示此消息,最终用户不知道堆栈跟踪是什么,但会理解“除以零”的句子。谢谢。我不是在寻找用户友好的东西,而是我自己的程序员友好的东西。就程序现在的形状而言,除非我解决了这个异常问题,否则它将无法工作。@slaadvak-堆栈跟踪是“无用的东西”——真的吗?!从OP的问题:“我想将错误的内容打印到屏幕上,以便我可以尝试跟踪问题”在向最终用户显示此问题时,它可能没有用处,或者过于冗长。但对于调试来说,这是一条路要走。