我们如何使Java代码最终跳转到最后

时间:2013-04-12 19:12:33

标签: java exception try-catch-finally

这是我看到的那段代码

 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 个答案:

答案 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对象,但ErrorThrowable

答案 3 :(得分:0)

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

你远程调试吗?即使没有,你能再次建立整个项目吗?