e.printStackTrace和System.out.println(e)之间的区别
2022-09-01 08:19:01
大概是新手的问题,但大家似乎都用,但是我一直用的时候异常处理。有什么区别,为什么更可取?e.printStackTrace()
System.out.println(e)
e.printStackTrace()
大概是新手的问题,但大家似乎都用,但是我一直用的时候异常处理。有什么区别,为什么更可取?e.printStackTrace()
System.out.println(e)
e.printStackTrace()
使用的输出流与@Brian指出的不一样,但细节水平也不相同 - 您可以尝试使用下面的简单测试。输出:
使用 :您只知道抛出了什么异常println
java.lang.UnsupportedOperationException: 尚未实现
与:你也知道是什么原因造成的(行号+调用堆栈)printStackTrace
java.lang.UnsupportedOperationException:尚未
在javaapplication27中实现。Test1.test(Test1.java:27)
at 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");
}
如果使用 ,则会将错误转储到 ,而不是 。System.out.println
stdout
stderr
传统上将错误转储为标准错误,因此您可以从错误输出中筛选正常的成功输出。这是命令行实用程序的常见做法,因此是一个好主意。
例如:
myCommand 2> /tmp/errors > /tmp/results
将错误写入一个日志,并将结果写入另一个日志。根据您的shell/调用过程等,您可以组合此信息,抛出错误,在抛出任何错误时做出反应等。有关详细信息,请参阅此处。
使用是一个好主意,因为您正在转储异常发生的位置。这对于跟踪意外错误通常是无价的,因为它会为您提供一个直接(如果详细)指针,指向您遇到错误的确切位置。printStackTrace()