在eclipse中编写例如以下的代码,eclipse会给出黄色告警:finally block does not complete normally。
public class Test{ public static void main(String[] args) { System.out.println(m1(null)); } public static String m1(String name) { try { name.length(); } finally { return name + "_test"; } }}
这段代码执行结果是:控制台打印null_test。不会抛出空指针异常(被JVM吞掉了)。
程序出现了同意异常,可是却被JVM私吞,显然这是不好的做法。不建议在finally块中使用return语句的原因例如以下:
1、finally块中的return语句会覆盖前面的return语句(try块、catch块中的return语句)。会导致非常难推断方法的返回结果,easy得出错误的结论。
2、假设finally块中包括了return语句,即使前面的try或catch块抛出了异常,则调用该方法的语句也不会获得catch块又一次抛出的异常。而是会得到finally块的返回值。而且不会捕获异常。
总之在finally中使用return是不好的编程实践,应该避免使用。关于try-catch-finally中使用return的返回值问题,能够看下这篇博客。列举了非常多种情况,分析也非常具体。就算是有经验的程序猿。也可能会错误地推断方法返回结果,不信你能够去试试。