抛出异常后的返回值

Des*_*ond 2 java

public double get_volume(int a){
  try{
    if (a < 0) {
      // this gets caught in the catch block
      throw new IllegalArgumentException("Only Positive Numbers & no Letters Please!"); 
    }
    return a*a*a;
  } catch (IllegalArgumentException e) {
    System.out.println(e.getMessage());
  }
}
Run Code Online (Sandbox Code Playgroud)

如果此函数收到负值,则会抛出异常,表示不允许.否则,它将继续计算音量.不知怎的,我仍然需要返回一些价值,但它真的需要吗?我该如何正确编写这段代码?

Era*_*ran 6

如果您在方法中捕获异常而不向调用者抛出任何异常(正如您目前所做的那样),则必须在catch块中返回一些默认值.

在方法中捕获异常可能更有意义,这将允许您在抛出异常时不返回任何内容.它还会通知调用者他们传递了无效输入.

public double get_volume(int a)
{
    if (a < 0) {
        throw new IllegalArgumentException("Only Positive Numbers & no Letters Please!"); 
    }
    return a*a*a;      
}
Run Code Online (Sandbox Code Playgroud)

现在,调用者负责处理异常.

请注意,由于IllegalArgumentException是未经检查的异常(因为它是子类RuntimeException),因此您不需要声明您的方法throws此异常.但是,当您抛出此异常时,在Javadoc中进行描述会很有帮助.

  • @YCF_L 如果OP想要在方法内打印错误消息,则无需在异常处理程序中执行此操作。在抛出异常之前,您可以简单地执行 `System.out.println("Only Positive Numbers &amp; no Letters Please!")`。但是,我不认为这样做有什么意义。 (2认同)