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語句)。會導致非常難推斷方法的返回結果,easy得出錯誤的結論。

2、假設finally塊中包括了return語句,即使前面的try或catch塊拋出了異常,則調用該方法的語句也不會獲得catch塊又一次拋出的異常。而是會得到finally塊的返回值。而且不會捕獲異常。

 

總之在finally中使用return是不好的編程實踐,應該避免使用。關於try-catch-finally中使用return的返回值問題,能夠看下http://www.cnblogs.com/aigongsi/archive/2012/04/19/2457735.html這篇博客。列舉了非常多種情況,分析也非常具體。就算是有經驗的程序猿。也可能會錯誤地推斷方法返回結果,不信你能夠去試試。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM