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