imu*_*ion 28 java exception-handling exception
可能是一个新手问题,但每个人似乎都在使用e.printStackTrace()
,但我总是System.out.println(e)
在异常处理时使用.有什么区别,为什么e.printStackTrace()
更好?
ass*_*ias 38
使用的输出流与@Brian指出的输出流不同,但细节水平也不相同 - 您可以尝试下面的简单测试.输出:
使用println
:您只知道抛出了什么异常
java.lang.UnsupportedOperationException:尚未实现
使用printStackTrace
:你也知道它是什么原因造成的(行号+调用栈)
java.lang.UnsupportedOperationException:尚未
在javaapplication27.Test1.main
(Test1.java:27)javaapplication27.Test1.main (Test1.java:19)中实现
public static void main(String[] args){
try {
test();
} catch (UnsupportedOperationException e) {
System.out.println(e);
e.printStackTrace();
}
}
private static void test() {
throw new UnsupportedOperationException("Not yet implemented");
}
Run Code Online (Sandbox Code Playgroud)
如果您使用System.out.println
,那么您将错误转储给stdout
,而不是stderr
.
将错误转储到标准错误是很传统的,因此您可以从错误输出中过滤正常的成功输出.这是命令行实用程序的常见做法,因此是一个好主意.
例如
myCommand 2> /tmp/errors > /tmp/results
Run Code Online (Sandbox Code Playgroud)
将错误写入一个日志,结果写入另一个日志.根据你的shell /调用过程等,你可以结合这些信息,抛出错误,如果发生任何错误就会做出反应等.有关详细信息,请参阅此处.
使用printStackTrace()
是一个好主意,因为你正在倾销异常发生的地方.这通常对于跟踪意外错误非常有用,因为它会为您提供直接(如果详细)指针,指向您遇到错误的位置.
System.out.println(e)
相当于System.out.println(e.toString())
:System.out
是一个 PrintStream,PrintStream.println(Object o)
调用PrintStream.println(o.toString())
.
e.toString()
返回类的名称和异常的 getLocalizedMessage()。
e.printStackTrace()
写入该信息到System.err的(未System.out的)和也栈跟踪,即,导致该异常的方法的链。这是有用的信息。
我经常认为如果有一种方法可以返回一个包含由e.printStackTrace()
. 由于您不必使用e.getStackTrace()
和编写自己的例程来输出 StackTraceElements 的结果数组。
归档时间: |
|
查看次数: |
73343 次 |
最近记录: |