try-catch-finally语句中有return的各类情况


try语句在返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally中的语句,而后分为以下三种情况:

  • 情况一:如果finally中有return语句,则会将try中的return语句”覆盖“掉,直接执行finally中的return语句,得到返回值,这样便无法得到try之前保留好的返回值。

  • 情况二:如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。

  • 情况三:如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况,:

    1. 如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。

    2. 如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。

  • 情况四:当finally语句块中有return 语句时,并且在finally语句块外面还有return语句时,这个时候编译不通过,编译会出现错误(对于返回值为基本数据类型的情况。)。当try语句块儿中出现return语句时,执行完finally语句的时候便会执行try中的return语句,这个时候便不会在执行finally语句块儿后面的语句了(返回值是基本数据类型的时候是这样)当是引用类型的时候又会出现新的情况。(引用类型必须在catch语句中写return语句,)


文章作者: Wujiu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wujiu !
  目录