eclipse黄色警告(finally block does not complete normally) ,不建议在finally中使用return语句

在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语句),会导致很难判断方法的返回结果,容易得出错误的结论。

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

 

总之在finally中使用return是不好的编程实践,应该避免使用。关于try-catch-finally中使用return的返回值问题,可以看下http://www.cnblogs.com/aigongsi/archive/2012/04/19/2457735.html这篇博客,列举了很多种情况,分析也很详细。就算是有经验的程序员,也可能会错误地判断方法返回结果,不信你可以去试试。

发布了335 篇原创文章 · 获赞 184 · 访问量 195万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览