日期:2014-05-20  浏览次数:20868 次

new的Exception打印顺序问题
import java.text.SimpleDateFormat;
public class ExceptionExer {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddhhMMss");
String date = "20130322110000";

try {

sdf.parse(date);
System.out.println("987654321");
throw new Exception();
} catch (Exception e) {
System.out.println("asdf");
e.printStackTrace();
} finally {
System.out.println("123456789");
}
}
}
代码如上,这样的打印顺序是异常,try块,catch块,finally块,但是如果把new 的Exception()换成一个具体的Exception(比如IllegalAccessException),打印顺序就变成try块,catch块,finally块,异常打印了,请教下这是为什么呢?在线等高手解答
exception 打印顺序

------解决方案--------------------
每次执行,异常的位置都可能不固定的,下面就是我执行结果

987654321
asdf
java.lang.IllegalAccessException
at ExceptionExer.main(ExceptionExer.java:11)
123456789


987654321
asdf
123456789
java.lang.Exception
at ExceptionExer.main(ExceptionExer.java:11)

------解决方案--------------------
System.out.println();用的是标准输出流:System.out
e.printStackTrace();用的是标准错误流:System.err
他们自己内部同步的,你执行无数次,换任何异常,都是try、catch、finally这样的顺序
但是他们两个是不同步的,和使用什么异常没关系,所以异常的顺序是不定的,你多执行几次就看出来了