# try catch finally 执行顺序你知道吗?

# 结论

  1. 不管有没有出现异常,finally块中代码都会执行
  2. 当try和catch中有return时,finally仍然会执行
  3. (关键点)finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的
  4. finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

# 相关问题?

# 1.如果try、catch中有return语句,finally中没有return,那么在finally中修改返回对象,会有影响吗?

会,基本类型在栈中存储,而对于非基本类型是存储在堆中的,返回的是堆中的地址,因此内容被改变了。

总结:如果try、catch中有return语句,finally中没有return,那么在finally中修改除包装类型和静态变量、全局变量以外的数据都不会对try、catch中返回的变量有任何的影响(包装类型、静态变量会改变、全局变量)

# 2.finally中使用return语句,try、catch中的return将被忽略吗?

会 总结:尽量不要在finally中使用return语句,如果使用的话,会忽略try、catch中的返回语句,也会忽略try、catch中的异常,屏蔽了错误的发生

# 3.finally中避免再次抛出异常,try、catch中的异常将被忽略吗?

会 总结:finally中避免再次抛出异常,一旦finally中发生异常,代码执行将会抛出finally中的异常信息,try、catch中的异常将被忽略

# 4.在实际项目中,finally常常是用来关闭流或者数据库资源的,并不额外做其他操作。

# 资料

try catch finally的执行顺序是什么 (opens new window)

全量分析

评 论:

上次更新时间: 6/30/2020, 2:10:18 PM