簡體   English   中英

為什么拋出未經檢查的異常會消除“缺少返回語句”錯誤

[英]Why does throwing an unchecked exception removes the “missing return statement” error

我對編程很陌生,因此這個問題可能看起來很傻。 下面提到的方法的返回類型為 int 數組。 當我們不拋出任何未經檢查的異常時,它會拋出我理解的錯誤。 但是為什么包含未經檢查的異常會消除該錯誤呢? 它仍然沒有任何返回語句,不是嗎?

public static int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[j] == target - nums[i]) {
                    return new int[] { i, j };
                }
            }
        }
        //throw new IllegalArgumentException("No two sum solution");
    }

在具有非 void 返回類型的方法中沒有實際要求有 return 語句。 例如:

int huh() {
  while (true) {}
}

合法的。

要求是該方法無法正常完成( JLS ):

如果將方法聲明為具有返回類型(第 8.4.5 節),則如果方法的主體可以正常完成(第 14.1 節),則會發生編譯時錯誤。

正常完成基本上是在方法的執行“落到底部”時,即在沒有遇到 return 或 throw 語句的情況下到達方法的末尾。

所以,如果你在方法的末尾放了一個 throw 語句,執行就無法到達方法的末尾,所以是合法的。

在上面的huh()示例的情況下,while 循環沒有正常完成,因此執行無法到達方法的末尾,因此您不需要 return 或 throw 那里。

在某些情況下,您的程序永遠不會到達內部 return 語句。 例如,如果nums的長度為 0 或nums[j] == target - nums[i]永遠不會為真。 對於這些情況,該方法需要返回一些東西或者它可以拋出異常。 您可以決定您的用例的正確行為是什么。 如果沒有為此類情況定義任何內容,並且您的 IDE 會讓您通過它,那么您將破壞代碼。 如果你拋出一個異常而不是什么都不做,你的 IDE 說它很好,因為你的代碼在技術層面上是正確的。

該異常強行將您從被調用的方法中踢出。 然后強制調用方法捕獲異常並繼續計算,而無需訪問被調用方法的返回值。

如果異常是不可避免的/無條件的,那么后面的 return 語句就不是必需的或有用的。

暫無
暫無

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

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