Java:try-catch 后缺少返回语句

标签 java

<分区>

我在 Triangle 类中使用下面的代码,以允许用户设置已声明的 Triangle 的第一个、第二个或第三个点。

public Point get(String p) throws IllegalArgumentException {
    IllegalArgumentException e = new IllegalArgumentException();
    try {
        if (p == "first") { return first; }
        else if (p == "second") { return second; }
        else if (p == "third") { return third; }
        else { throw e; }
    }
    catch (e) {
        System.out.println("Error: " + e);
    }
}

编译器告诉我:

Triangle.java:41: error: missing return statement
    }
    ^

但我认为 catch 语句的要点是能够捕获错误并返回描述错误的字符串,而不必担心匹配函数的返回类型。

最佳答案

因为您缺少 return 语句。

该方法声明它返回一些东西,所以它必须返回一些东西(或抛出异常)。如果在任何语句执行之前抛出异常,编译器无法保证 try block 中的任何 return 语句都能到达。所以 catch block 也需要返回一些东西(或者抛出异常,或者完全在 try/catch 构造之后返回一些东西)。

编辑:再看一遍,您还可能在 try block 中遗漏了一个 return。 (如果在整个 try/catch 结构之后没有一个。)如果 if/else 结构中的条件都不满足怎么办?什么都没有返回。这是无效的。

基本上,所有逻辑路径都必须导致方法的有效退出。您错过了两条这样的路径。

关于Java:try-catch 后缺少返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33536284/

相关文章:

java - 在通知中使用 ConstraintLayout 时崩溃

java - 内部开关无法接受用户输入

java - 将嵌套文档 mongoDB 序列化到 Jackson

java - 去除字符串中的重复字符

java - 调用 onSharedPreferenceChanged 后应用主题没有改变

Java- 非零 Int 除以 10 在 Float 中等于 0.0?

java - 用于删除除 $ 之外的所有非字母数字字符的正则表达式

java - Java 中的并发 HTTP URL 连接

java - JSF - 创建通用确认页面(动态导航)

java - 错误 : Unable to fnd class R. java 没有这样的文件或目录