e.printStackTrace和System.out.println(e)之间的区别

2022-09-01 08:19:01

大概是新手的问题,但大家似乎都用,但是我一直用的时候异常处理。有什么区别,为什么更可取?e.printStackTrace()System.out.println(e)e.printStackTrace()


答案 1

使用的输出流与@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");
}

答案 2

如果使用 ,则会将错误转储到 ,而不是 。System.out.printlnstdoutstderr

传统上将错误转储为标准错误,因此您可以从错误输出中筛选正常的成功输出。这是命令行实用程序的常见做法,因此是一个好主意。

例如:

myCommand 2> /tmp/errors > /tmp/results

将错误写入一个日志,并将结果写入另一个日志。根据您的shell/调用过程等,您可以组合此信息,抛出错误,在抛出任何错误时做出反应等。有关详细信息,请参阅此处

使用是一个好主意,因为您正在转储异常发生的位置。这对于跟踪意外错误通常是无价的,因为它会为您提供一个直接(如果详细)指针,指向您遇到错误的确切位置。printStackTrace()


推荐