簡體   English   中英

最后在使用return時無法到達的語句?

[英]Unreachable statement when using return in finally?

這樣編譯:

class Ex1 {
    public int show() {
        try {
            int a=10/10;
            return 10;
        }   
        catch(ArithmeticException e) {
            System.out.println(e);
        }
        finally {
            System.out.println("Finally");
        }
        System.out.println("hello");
        return 20;
    }
}

另一方面,這不是:

class Ex15 {
    public int show() {
        try {
            int a=10/0;
            return 10;
        }
        catch(ArithmeticException e) {
            System.out.println(e);
        }
        finally {
            System.out.println("Finally");
            return 40;
        }

        System.out.println("hello");
        return 20;
    }
}

並給出不可達的語句System.out.println(“ hello”); 錯誤。 為什么會這樣呢?

最后有一個返回,因此您可能會遇到無法到達的代碼塊錯誤。

finally
{   
    System.out.println("Finally"); 
    return 40;
}
System.out.println("hello"); // unreachable code
return 20;

這實際上是Java中的編譯時錯誤。 參見第14.20節。

如果由於語句無法訪問而無法執行該語句,則是編譯時錯誤。

這是unreachable code 根據編譯器, System.out.println("hello"); 永遠無法執行。

除此之外,永遠不要在finally塊中寫入return (有關為什么不應這樣做的信息,請參見Java的隱藏功能 )。

編輯:

是的,但是最終使返回的原因是什么?

這不是因為它處於finally塊之內。 即使您刪除了finally關鍵字,您仍然會收到錯誤消息。

   class ex15 {
        public int show() {
            int a = 10 / 0;
            return 40;
            System.out.println("hello");
            return 20;
        }
    }

顯然,如果return 40 ,則無法執行下一行。 finally只是意味着“無論做什么都要做”。 所以。

當您在“ finally”塊中放置“ return”時,其后的所有內容將永遠不會執行。 “ return”語句在那里結束該方法。

如果將System.out.println()放在第一個方法中的“ return”語句之后,則會出現相同的錯誤。

returnfinally塊中獲得return 這使得此后的任何語句均無法訪問。 同樣,您在try塊中有return ,在finally塊中也有return 這沒有道理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM