这是我看到的那段代码
1 session s=null;
2 try{
3 s= SessionCreator.createSession();
4 System.out.println("Session Created");
5 s.validate();
6 }catch (Exception e){
7 e.printStackTrace();
8 }finally{
9 s.close();
10 }
调试器从第3行跳到第9行,这怎么可能? 4,5和7都没有被执行。这让我很困惑。第3行是供应商代码,所以我不知道发生了什么。有线索吗?
答案 0 :(得分:4)
尝试使用catch (Throwable e)
代替Exception
。可能会抛出Error并且错误不是“异常”的子类,而是扩展为“Throwable”。
以下是一个示例:http://ideone.com/Zs7HGw
答案 1 :(得分:0)
在这里阅读。
http://docs.oracle.com/javase/tutorial/essential/exceptions/handling.html
放入try
块的任何代码都有可能失败。如果它确实失败了(可能在第2行或第4行),它应该从try
块中跳出并进入catch
块。 finally
块将以任一方式执行。
如果第2行失败,您的说明听起来是正确的,但第6行应该执行。如果未执行第6行,则整个try
块正在成功。确切的输出是什么?
答案 2 :(得分:0)
如果第4行和第7行都没有执行,可能(我强调“也许”因为我不太了解Java异常机制)第3行没有抛出Exception
对象,但Error
或Throwable
。
答案 3 :(得分:0)
我只知道这个问题来自远程调试会话,其中底层代码服务器端与我们在本地看到的代码不对应。由于调试器只传递线而不是代码本身,因此可能导致跳转。
你远程调试吗?即使没有,你能再次建立整个项目吗?