首页 > 解决方案 > 为什么抛出未经检查的异常会消除“缺少返回语句”错误

问题描述

我对编程很陌生,因此这个问题可能看起来很傻。下面提到的方法的返回类型为 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");
    }

标签: javaexceptionreturnthrowunchecked-exception

解决方案


在具有非 void 返回类型的方法中没有实际要求有 return 语句。例如:

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

合法的。

要求是该方法无法正常完成(JLS):

如果将方法声明为具有返回类型(第 8.4.5 节),则如果方法的主体可以正常完成(第 14.1 节),则会发生编译时错误。

正常完成基本上是在方法的执行“落到底部”时,即在没有遇到 return 或 throw 语句的情况下到达方法的末尾。

所以,如果你在方法的末尾放了一个 throw 语句,执行就无法到达方法的末尾,所以是合法的。

在上面的huh()示例中,while 循环没有正常完成,因此执行无法到达方法的末尾,因此您不需要在此处返回或抛出。


推荐阅读