try{} catch{} finally{} 语句注意事项总结

try{} catch{} finally{} 语句注意事项:

  • 如果有一个catch{}语句匹配上,其他catch{}分支就不会执行了
  • try{}里面如果有return,也会先执行finally{}里面的语句,之后再return
  • 如果try{}和finally{}里面都与return语句,则try{}里面的return不会被执行
  • finally{}部分什么情况下不会被执行?
    • 在try{}之前就return的情况
    • 在try{}里面有System.exit()的情况
    • 线程被interrupted/killed的情况
    • 死机、停电
  • 如果在finally{}里面出现异常,有什么后果?
    • 会覆盖try{}里面的异常,导致try{}里面的异常无法被捕捉到
    • 会导致finally{}异常后面的代码不会被执行
    • 会被调用者捕获
  • 如果在finally{}里面会出现异常,怎么解决?
    • 留给调用者去解决
    • 在finally{}里面捕获后,写进日志里面

参考文章:《 The Java Tutorials 》:

The finally Block

The finally block always executes when the try block exits. This ensures that the finally block is executed even if an unexpected exception occurs. But finally is useful for more than just exception
handling — it allows the programmer to avoid having cleanup code accidentally bypassed by a return,continue, or break. Putting cleanup code in a finally block is always a good practice, even when no exceptions are anticipated.

Note: If the JVM exits while the try or catch code is being executed, then the finally block may not execute. Likewise, if the thread executing the try or catch code is interrupted or killed, the finally
block may not execute even though the application as a whole continues.

时间: 2024-12-21 09:44:37

try{} catch{} finally{} 语句注意事项总结的相关文章

编 写高性能的 SQL 语句注意事项

1. IS NULL 与 IS NOT NULL不能用 null 作索引, 任何包含 null 值的列都将不会被包含在索引中. 即使索引有多列这样的情况下,只要这些列中有一列含有 null,该列就会从索引中排除.也就是说如果某列存在空值,即使对该列建索引也不会提高性能.任何在 where 子句中使用 is null 或 is not null 的语句优化器是不允许使用索引的.2. 联接列对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的.我们一起来看一个例子,假定有一个职工表(

【转】case: Java中try catch finally语句中含有return语句的执行情况(总结版)

Java中try catch finally语句中含有return语句的执行情况(总结版) 有一点可以肯定,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面来看这几种情况. 情况一(try中有return,finally中没有return): [java] view plain copy public class TryTest{ public 

Java中try catch finally语句中含有return语句的执行情况(总结版)

在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面来看这几种情况. 情况一(try中有return,finally中没有return): public class TryTest { public static void main(String[] args) { System.out.println(t

关于MySql中数据库、表的操作以及增删改查等一些SQL语句注意事项

(1)怎么在cmd中复制粘贴内容? 参考:http://jingyan.baidu.com/article/93f9803fd3a4dde0e46f55f5.html (2)怎么打开进入和退出数据库? --其中-h是主机名,可以写IP地址127.0.0.1,回车后,提示输入密码即可. mysql -h localhost -u root -p --退出数据库是exit或者quit或者CTRL+C. (3)在dos中以及mysql中修改mysql的root密码 --在dos中,即不需要进入mysq

Java中try catch finally语句中含有return语句的执行情况

finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面来看这几种情况. 情况一(try中有return,finally中没有return): public class TryTest{ public static void main(String[] args){ System.out.println(test()); } private static

[JavaScript]catch(ex)语句中的ex

try/catch语句是JavaScript语句提供的异常处理机制,一旦try语句块内部的语句抛出异常,在catch语句块即可捕获到Error类型的异常信息.我们知道JavaScript里是没有块作用域的,但是这个常识却在catch语句块里面得到了相反的现象.看如下代码: (function(){ try{ throw new Error("error"); } catch(ex){ console.log(ex.message); } finally{ console.log(&qu

循环语句注意事项

三种循环语句的区别? * do...while循环至少执行一次循环体. * for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句. for循环和while循环的区别: *如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环. 不知道用谁就用for循环.因为变量及早的从内存中消失,可以提高内存的使用效率. 需求:在控制台输出所有的"水仙花数"和个数 * 所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身. * 举例:153就是

2.3switch case 语句注意事项。

#include<stdio.h> int main() { void action1(int, int),action2(int, int); char ch; int a=15, b=23; ch = getchar(); switch(ch) { case 'a': //没有语句,则与下一case共用语句.且属于同一层,一起break. case 'A':action1(a,b);break; //void的类型没有返回值,这里为调用函数,也是一个表达式. case 'b': //cas

hibernate hql语句 注意事项

现在有实体类 Student 和User . public class Student{ private String id; private Sting classRoom; private User user; @Id@GeneratedValue(generator = "paymentableGenerator")@GenericGenerator(name = "paymentableGenerator", strategy = "uuid&qu