Javae异常处理输出错误

时间:2014-06-17 09:01:54

标签: java exception exception-handling

我正在尝试运行“如何在Java第9版中编程”中的示例。此示例关于异常处理以及如何使用它。每次我运行我的程序,我得到不同的输出。为什么?!我正在使用NetBeans IDE。代码是:

public class StackUnwinding {
    public static void main(String[] args){
        try{
            method1();
        }catch(Exception exception){
            System.err.printf("%s\n\n", exception.getMessage());
            exception.printStackTrace();

            StackTraceElement[] traceElement = exception.getStackTrace();

            System.out.println("\nStack trace from getStackTrace:");
            System.out.println("Class\t\tFile\t\tLine\t\tMethod");

            for(StackTraceElement element : traceElement){
                System.out.printf("%s\t", element.getClass());
                System.out.printf("%s\t", element.getFileName());
                System.out.printf("%s\t", element.getLineNumber());
                System.out.printf("%s\t", element.getMethodName());
            }
        }
    }

    public static void method1() throws Exception{
        method2();
    }

    public static void method2() throws Exception{
        method3();
    }

    public static void method3() throws Exception{
        throw new Exception("Exceptions thrown in method3");
    }
} 

1 个答案:

答案 0 :(得分:2)

由于流的缓冲和流刷新的时间,输出有时可能在System.err错误流和System.out输出流之间交错。如果只使用代码中的错误流进行打印,则输出将始终相同。

如果您只使用System.out,则可能会得到不同的结果,因为printStackTrace()会在内部使用错误流。