finally块的问题(finally block does not complete normally)

来源:互联网 发布:蓝桥杯c语言试题2017 编辑:程序博客网 时间:2024/06/08 11:17

1、java中的return和finally谁先执行

finally先执行.可以形象的说,方法在顺序化的一直往下走,走着走着,发现了Rerurn(并未执行),它知道它快活不下去了,临死前.他就去找Finally,让Finally把事情做完.这种情况在Debug的时候比较明显,走到Return所在行,就进Finally,然后再回到Rerurn,作返回

2、
try{ 
  ... 
} finally {  
  ... 
  return; 


应该写成 
try{ 
  ... 
} finally {  
  ... 

return; 

不要在finally 里面使用 return 或者 new throw()之类的,否则会引起编译器警告 

当finall块中包含return语句时,Eclipse会给出警告“finally block does not complete normally”,原因分析如下:

1、不管try块、catch块中是否有return语句,finally块都会执行。
2、
finally块中的return语句会覆盖前面的return语句(try块、catch块中的return语句),所以如果finally块中有return语句,Eclipse编译器会报警告“finally block does not complete normally”。

3、如果finally块中包含了return语句,即使前面的catch块重新抛出了异常,则调用该方法的语句也不会获得catch块重新抛出的异常,而是会得到finally块的返回值,并且不会捕获异常。

结论,

finally 内部使用 return 语句是一种很不好的习惯,如果try中还有return语句,它会覆盖了try 区域中 return 语句的返回值,程序的可读性差

面对上述情况,其实更合理的做法是,既不在 try block 内部中使用 return 语句,也不在 finally 内部使用 return 语句,而应该在 finally 语句之后使用 return 来表示函数的结束和返回

0 0
原创粉丝点击