Java 打印异常原因
我正在编写一个Java程序,我有一行代码需要一个Java 打印异常原因,java,Java,我正在编写一个Java程序,我有一行代码需要一个try…catch语句。问题是,代码行总是落在语句的catch部分。我不知道问题的原因或原因,因此我想将错误内容打印到屏幕上,以便我可以尝试跟踪问题。我该怎么做?我可以试试System.out.println(e)其中e是Exception类型的变量吗?您可以试试: try { . . . } catch (Exception e) { e.printStackTrace(); } 编辑(动机:如果异常可能是次要异常(由于另一个异
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的问题:“我想将错误的内容打印到屏幕上,以便我可以尝试跟踪问题”在向最终用户显示此问题时,它可能没有用处,或者过于冗长。但对于调试来说,这是一条路要走。