如何在Java再次编译的自己的函数中处理异常?
正如主题中提到的那样:Java迫使我返回一些东西,因为异常的处理是在自己的函数中进行的如何在Java再次编译的自己的函数中处理异常?,java,exception,Java,Exception,正如主题中提到的那样:Java迫使我返回一些东西,因为异常的处理是在自己的函数中进行的 public String returnLel(String mattDamon) { try { trick(mattDamon); // The LelException could be thrown return "lel"; } catch (LelException e) { handleException(); } } public void h
public String returnLel(String mattDamon) {
try {
trick(mattDamon); // The LelException could be thrown
return "lel";
} catch (LelException e) {
handleException();
}
}
public void handleException() {
throw new RuntimeException();
}
`你将如何处理这种情况取决于你自己 如果您能够通过记录异常并返回null来处理异常,因为大多数注释都暗示这是完全正确的
只是考虑到这种情况也意味着“回调”方法可能不是处理这个异常的正确的地方,而是让主叫者在这种情况下决定如何“进一步抛出”:
这意味着,如果调用方调用returnLel方法,他必须尝试/捕获异常(或进一步抛出异常)在这种情况下,可能意味着更好的设计,因为调用者不会收到
null
或String',而是收到String或leleexception`而将return语句移出try-catch
try块应该围绕可能引发异常的部分,而return语句则不这样做
以下是java教程,了解有关此主题的一些基本知识:
您的代码将无法编译,因为编译器不够“聪明”,无法知道您在handleException
中抛出了RuntimeException
为了使代码能够编译,您可以:
- 直接
抛出新的RuntimeException()代码>在您的catch
语句中(丑陋)
- 调用
handleException()后返回null
代码>(可以接受,但还是有点难看)
- 添加一个
finally
语句以最终确定您的方法,并返回null
或任何值(如果未满足某些条件)(推荐)
还要注意,我假设leleleexception扩展RuntimeException
,否则您的catch
语句将无法编译 你必须返回一些东西,因为你设计了这样的方法,而不是因为异常处理。但是不可能不返回一些东西。如果抛出异常,则运行时异常会使程序崩溃,因为handleException
不会返回任何内容(或void
),因此该程序不会编译。编译器不够聪明,无法知道handleException
始终会抛出异常(这是一件好事,因为这样的“优化”只适用于像您这样的假设案例)。
public String returnLel(String mattDamon) throws LelException{
trick(mattDamon); // The LelException could be thrown
return "lel";
}