Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们如何使Java代码最终跳转到_Java_Exception_Try Catch Finally - Fatal编程技术网

我们如何使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是不可避免的),那么该异常将“掩盖”原始异常。