Java:try-catch

时间:2015-11-05 03:39:04

标签: 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语句的要点是能够捕获错误并返回描述错误的字符串,而不必担心匹配函数的返回类型。

4 个答案:

答案 0 :(得分:3)

因为您错过了return声明。

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

修改:再看一下,您可能还错过了return区块中的try。 (如果在整个try/catch结构之后没有一个。)如果满足if/else结构中的所有条件,该怎么办?什么都没有归还。这是无效的。

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

答案 1 :(得分:2)

你没有在几个路径上返回函数中的任何内容。

  

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

这完全不是try-catch所做的,而且你的函数被声明为返回Point而不是String

try-catch只是“捕获”ThrowableErrorException)并允许您在抛出代码时运行一些代码,而不是简单地使用Uncaught Exception/Error

你需要在try-catch无法返回字符串之后从函数中返回一些值,也没有一个语言结构就像你已经解释了你对{{1}的理解一样}。

此外,您的代码实际上不会抛出try-catch,因此永远不会调用您的IllegalArgumentException块。在这种情况下,它听起来像你想要的是这样的东西

catch

然后可以像这样调用代码

public Point get(String p) throws IllegalArgumentException {
        if (p == null) { throw new IllegalArgumentException(); }
        if (p.equals("first")) { return first; }
        else if (p.equals("second")) { return second; }
        else if (p.equals("third")) { return third; }
        else { throw new IllegalArgumentException(); }
}

答案 2 :(得分:1)

您缺少两部分: 1. try块中的return语句用于else条件 2. Catch块不会导致return语句或throw语句

我不知道第一,第二,第三变量的类型是字符串还是Point,但是你应该使用Point返回,因为你的函数是: public Point get(String p){ ... }

答案 3 :(得分:-1)

你有三个if语句。当输入不满足任何一个时会发生什么?您的方法没有针对该案例的return语句。