Java:在try-catch之后缺少return语句

我在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语句。

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

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

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

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

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

这根本不是try-catch作用,而且你的函数被声明为返回Point而不是String

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

你需要在try-catch之后从函数返回一些值,无法返回一个字符串,也没有一个语言结构,就像你已经解释了你对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(); } } 

然后可以像这样调用代码

 Point p; try { p = get("notFirst"); } catch (IllegalArgumentException ex) { //oh no, we gave a bad argument, and the method told us nicely. } 

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

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

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