我们如何使Java代码最终跳转到
这是我看到的一段代码我们如何使Java代码最终跳转到,java,exception,try-catch-finally,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行,这怎
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行是一个供应商代码,所以我不知道发生了什么。有什么线索吗?请看这里
放入try
块的任何代码都有可能失败。如果它确实失败了(可能在第2行或第4行),它应该从try
块中断,进入catch
块。最后
块将以任何方式执行
如果第2行失败,您的描述听起来是正确的,但第6行应该执行。如果没有执行第6行,则整个try
块将成功。确切的输出是什么?请阅读此处
放入try
块的任何代码都有可能失败。如果它确实失败了(可能在第2行或第4行),它应该从try
块中断,进入catch
块。最后
块将以任何方式执行
如果第2行失败,您的描述听起来是正确的,但第6行应该执行。如果没有执行第6行,则整个try
块将成功。确切的输出是什么?尝试使用catch(Throwable e)
而不是Exception
。可能会引发错误,错误不是“Exception”的子类,而是扩展了“Throwable”
下面是一个示例:尝试使用catch(Throwable e)
而不是Exception
。可能会引发错误,错误不是“Exception”的子类,而是扩展了“Throwable”
这里有一个例子:如果第4行和第7行都没有执行,可能(我强调“可能”,因为我不太深入地了解Java异常机制)第3行没有抛出一个
异常
对象,但是如果第4行和第7行都没有执行,则抛出一个错误
或一个Throwable
,maybe(我强调“maybe”,因为我对Java异常机制不太了解)第3行没有抛出异常
对象,但是一个错误
或一个可丢弃的
我只从远程调试会话中知道这个问题,其中底层代码服务器端与我们在本地看到的代码不对应。由于调试器只传递行,而不传递代码本身,因此可能导致不可能的跳转
你远程调试吗?即使没有,您能否重新构建整个项目?我只从远程调试会话中知道这个问题,在远程调试会话中,底层代码服务器端与我们在本地看到的代码不一致。由于调试器只传递行,而不传递代码本身,因此可能导致不可能的跳转
你远程调试吗?即使没有,您能否再次构建整个项目?您确定第4行没有执行吗?您确定类文件确实与此源同步吗?如果第3行抛出异常,则执行后会出现
finally
块。如果这也引发了一个异常(它会,因为此时s
有一个null
值,所以NPE是不可避免的),那么该异常将“屏蔽”原始异常。您确定没有执行第4行吗?您确定类文件真的与该源同步吗?如果第3行引发异常,执行之后是finally
块。如果这也会引发异常(因为此时s
有一个null
值,所以NPE是不可避免的),那么该异常将“掩盖”原始异常。