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 次 |
| 最近记录: |