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

Unw*_*ast 2 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器告诉我:

Triangle.java:41: error: missing return statement
    }
    ^
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*vid 6

因为你缺少一个return声明。

该方法声明它返回某些内容,因此它必须返回某些内容(或抛出异常)。如果在执行任何语句之前引发异常,则编译器无法保证将到达块return中的任何语句。try因此该catch块还需要返回一些东西(或者抛出异常,或者在try/catch构造完成后返回一些东西)。

编辑:再看一遍,您也可能returntry块中丢失了 a 。(如果整个结构后没有一个try/catch。)如果结构中的任何条件if/else都不满足怎么办?什么也没有返回。这是无效的。

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