如何在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

正如主题中提到的那样:Java迫使我返回一些东西,因为异常的处理是在自己的函数中进行的

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";    
}