Tag: try catch finally

如果finally块引发exception,会发生什么?

如果finally块引发exception, 究竟发生了什么? 具体来说,如果在finally块中途抛出exception,会发生什么情况。 这个块中的其余语句(之后)是否被调用? 我知道exception会向上传播。

Java尝试赶上最后块没有Catch

我正在审查一些新的代码。 该程序只有一个try和一个finally块。 由于catch块被排除在外,如果try块在遇到exception或可抛出的情况时如何工作? 它是否直接进入到finally块?

返回语句在catch和finally中的行为

请参阅以下代码并解释输出行为。 public class MyFinalTest { public int doMethod(){ try{ throw new Exception(); } catch(Exception ex){ return 5; } finally{ return 10; } } public static void main(String[] args) { MyFinalTest testEx = new MyFinalTest(); int rVal = testEx.doMethod(); System.out.println("The return Val : "+rVal); } } 结果是返回Val:10。 Eclipse显示一个警告: finally block does not complete normally 。 catch块中的return语句会发生什么?

为什么试着{…}最后{…}好; 尝试{…} catch {}不好?

我曾经看到有人说,没有任何争论就使用catch是一种糟糕的forms,特别是如果这种catch没有做任何事情: StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } catch // No args, so it will catch any exception {} reader.Close(); 但是,这被认为是很好的forms: StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } finally // Will execute despite any exception { reader.Close(); } 据我所知,将清理代码放在finally块中,并在try..catch块之后放置清理代码之间的唯一区别是,如果在try块中有返回语句(在这种情况下,清理代码将在最后运行,但try..catch之后的代码将不会)。 否则,最后有什么特别的?

Java的System.exit()如何与try / catch / finally块一起使用?

我知道在try / catch / finally块中返回的头痛 – 即使try或catch块中的返回应该是执行的,finally中的返回总是返回方法的情况。 但是,是否也适用于System.exit()? 例如,如果我有一个try块: try { //Code System.exit(0) } catch (Exception ex) { //Log the exception } finally { System.exit(1) } 如果没有例外,哪个System.exit()将被调用? 如果出口是一个返回语句,那么System.exit(1)将始终(?)被调用。 但是,我不确定退出的行为是否与退货不同。 代码是在一个极端的情况下,即使不是不可能重现,也是非常困难的,所以我不能写一个unit testing。 我今天晚些时候会试着做一个实验,如果我有几分钟的空闲时间,但是我还是很好奇的,也许有人会知道答案,可以在之前提供,或者我无法运行实验。

从Java中的finally块返回

我最近惊讶地发现在Java的finally块中可能有一个return语句。 看起来好像很多人认为按照“ 不要在最后条款中回来”中所描述的那样做是件坏事。 稍微深入一点,我也发现“ Java的回归并不总是如此 ”,它显示了最终块中其他typesstream量控制的一些非常可怕的例子。 所以,我的问题是,任何人都可以给我一个例子,在finally块中的返回语句(或其他stream量控制)产生更好/更易读的代码?

终于总是在Java中执行?

我有一个try / catch块,里面有回报。 这个finally块会被调用吗? 例如: try { something(); return success; } catch (Exception e) { return failure; } finally { System.out.println("i don't know if this will get printed out."); } 我知道我只需要input这个,看看会发生什么(实际上这就是我要做的事情),但是当我search到答案时,什么都没有出现,所以我想我会把这个问题放在一个问题上。