抛出异常后的返回值

时间:2017-01-30 08:25:36

标签: 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());
  }
}

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

2 个答案:

答案 0 :(得分:6)

如果您在方法中捕获异常而不向调用者抛出任何异常(就像您当前那样),则必须在catch块中返回一些默认值。

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

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

现在调用者负责处理异常。

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

答案 1 :(得分:3)

如果您也使用相同的方法捕获它,那么您并没有真正抛出异常。我认为你的意思是做:

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