Questions tagged «try-catch-finally»

catch和finally的共同用法是在try块中获取和使用资源,在catch块中处理特殊情况,并在finally块中释放资源。



20
为什么最终尝试{…} {…}好?尝试{…}抓住{}不好吗?
我见过有人说使用不带参数的catch是一种不好的形式,尤其是在该catch没有执行任何操作的情况下: StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } catch // No args, so it will catch any exception {} reader.Close(); 但是,这被认为是很好的形式: StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } finally // Will execute despite any exception { reader.Close(); } 据我所知,将清理代码放入finally块与将清理代码放入try..catch块之后的唯一区别是,如果您在try块中包含return语句(在这种情况下,最终的清理代码将运行,但是try..catch之后的代码不会)。 否则,最后有什么特别之处?


6
从Java中的finally块返回
最近我很惊讶地发现,在Java的finally块中可能有一个return语句。 似乎很多人都认为这是一件坏事,如“ 不要在finally子句中返回”中所述。更深入地研究,我还发现“ Java的回报并不总是 ”,这在finally块中显示了一些其他类型的流控制的可怕例子。 因此,我的问题是,谁能给我一个示例,其中finally块中的return语句(或其他流控制)产生更好/更易读的代码吗?

6
从try catch最终阻止中返回是否是错误的做法?
所以今天早上我遇到了一些看起来像这样的代码: try { x = SomeThingDangerous(); return x; } catch (Exception ex) { throw new DangerousException(ex); } finally { CleanUpDangerousStuff(); } 现在,此代码可以正常编译并且可以正常工作,但是从try块中返回并不适合,特别是如果有关联的final。 我的主要问题是,如果最终抛出了自己的异常,将会发生什么?您有一个返回的变量,但也有一个异常要处理...所以我想知道其他人如何从try块中返回?

6
“最终”是否总是在Python中执行?
对于Python中任何可能的try-finally块,是否保证finally将始终执行该块? 例如,假设我在一个except街区中返回: try: 1/0 except ZeroDivisionError: return finally: print("Does this code run?") 或者,也许我重新提出一个Exception: try: 1/0 except ZeroDivisionError: raise finally: print("What about this code?") 测试表明finally上述示例确实可以执行,但我想我还没有想到其他场景。 在任何情况下,某个finally块可能无法在Python中执行?



5
“最终阻止无法正常完成” Eclipse警告
Eclipse在以下代码中给我该警告: public int getTicket(int lotteryId, String player) { try { c = DriverManager.getConnection("jdbc:mysql://" + this.hostname + ":" + this.port + "/" + this.database, this.user, this.password); int ticketNumber; PreparedStatement p = c.prepareStatement( "SELECT max(num_ticket) " + "FROM loteria_tickets " + "WHERE id_loteria = ?" ); p.setInt(1, lotteryId); ResultSet rs = p.executeQuery(); …

8
捕获和最终返回语句的行为
请参见以下代码,并解释输出行为。 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 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.