1

这是我看到的一段代码

 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 行是供应商代码,所以我不知道发生了什么。有什么线索吗?

4

4 回答 4

4

尝试使用catch (Throwable e)而不是Exception. 可能会抛出错误,并且错误不是“异常”的子类,而是扩展了“可抛出” 。

这是一个例子:http: //ideone.com/Zs7HGw

于 2013-04-12T19:18:36.357 回答
0

在这里阅读。

http://docs.oracle.com/javase/tutorial/essential/exceptions/handling.html

放入try块中的任何代码都有可能失败。如果它确实失败了(可能在第 2 行或第 4 行),它应该跳出try块并进入catch块。该finally块将以任何一种方式执行。

如果第 2 行失败,您的描述听起来是正确的,除了第 6 行应该被执行。如果第 6 行没有被执行,那么你的整个try块就成功了。确切的输出是什么?

于 2013-04-12T19:16:04.097 回答
0

如果第 4 行和第 7 行都没有被执行,那么可能(我强调“可能”,因为我不太了解 Java 异常机制)第 3 行不是抛出一个Exception对象,而是一个Error或一个Throwable.

于 2013-04-12T19:18:46.037 回答
0

我只从远程调试会话中知道这个问题,其中底层代码服务器端与我们在本地看到的代码不对应。由于调试器只传达行而不是代码本身,它可能导致不可能的跳转。

你远程调试吗?即使没有,你能重新构建整个项目吗?

于 2013-04-12T19:19:04.377 回答