[英]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”語句之后,則會出現相同的錯誤。
您return
在finally
塊中獲得return
。 這使得此后的任何語句均無法訪問。 同樣,您在try
塊中有return
,在finally
塊中也有return
。 這沒有道理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.