java - 为什么抛出未经检查的异常会消除“缺少返回语句”错误
问题描述
我对编程很陌生,因此这个问题可能看起来很傻。下面提到的方法的返回类型为 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 循环没有正常完成,因此执行无法到达方法的末尾,因此您不需要在此处返回或抛出。
推荐阅读
- javascript - 无法显示小倍数的折线图
- javascript - TypeScript - 仅在有值时在 POST 上发送可选字段
- php - Monolog 没有写入正确的日志文件
- r - 具有多个条件的行和
- node.js - 如何为使用 nodejs 的 Watson Assistant API 查找 ibm-watson 的 api-key 和密码
- python-3.x - 计算文本中不包括缩进的空格数
- javascript - 当我使用 renderItme 时,react-native-snap-carousel 返回“无法读取未定义的属性‘concat’”
- javascript - 过滤使用 readdirp 读取的文件
- c++ - 将窗口的样式从标准更改为没有标题栏并返回
- sql - 如何获取我的批量更新 SQL Server 的 ID