我正在尝试运行“如何在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");
}
}
答案 0 :(得分:2)
由于流的缓冲和流刷新的时间,输出有时可能在System.err
错误流和System.out
输出流之间交错。如果只使用代码中的错误流进行打印,则输出将始终相同。
如果您只使用System.out
,则可能会得到不同的结果,因为printStackTrace()
会在内部使用错误流。