本帖最后由 徐盼盼 于 2013-3-10 17:18 编辑
做异常的练习的时候做了以下的测试代码:
class ExceptionTest {
public static void testException() throws Exception{ //throws 声明方法会抛出异常
String s="";
try{
System.out.println(s.toString()); //这里发生异常
throw new Exception(); //在try中抛出异常 ,说明在try中可以抛出异常
}catch(Exception e){ //catch是捕获抛出的异常
System.out.println("抛出捕获到的异常");
throw e;
}finally{
System.out.println("in finally"); //finally不管异常是否发生总会被执行
}
}
/**
* @param args
*/
public static void main(String[] args) {
try {
ExceptionTest.testException();
}catch(Exception e){
e.printStackTrace();
}
}
}
期望的输出顺序应该是:
抛出捕获到的异常
in finally
java.lang.Exception
at ExceptionTest.testException(ExceptionTest.java:15)
at ExceptionTest.main(ExceptionTest.java:33)
但是实际上顺序有时候的结果是这样的:
java.lang.Exception
抛出捕获到的异常
in finally
at ExceptionTest.testException(ExceptionTest.java:15)
at ExceptionTest.main(ExceptionTest.java:33)
或者
java.lang.Exception
at ExceptionTest.testException(ExceptionTest.java:15)
at ExceptionTest.main(ExceptionTest.java:33)
抛出捕获到的异常
in finally
这个就不理解了,难道是e.printStackTrace()是异步的吗?那如何将异步改为同步呢?
|