eclipse黃色警告(finally block does not complete normally) ,不建議在finally中使用return語句

來源:互聯網
上載者:User

標籤:finally塊中使用return的問題   try和catch和finally的使用   

在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,不會拋出null 指標異常(被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這篇部落格,列舉了很多種情況,分析也很詳細。就算是有經驗的程式員,也可能會錯誤地判斷方法返回結果,不信你可以去試試。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.