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
只是“捕获”一个Throwable
( Error
或Exception
),并允许您在抛出代码时运行一些代码,而不是简单地使用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语句。