”throws“的作用是不在本方法中进程异常处理,而是抛给调用此方法的类中进行处理。
解释:throws后,调用的方法必须进行此调用方法类的异常捕获,也可以继续向上抛出,最后一直到main方法上,此时虽然进行异常上抛,但是如果出现错误,也是可以正常的输出错误信息的。
第一:throw最重要的用法,不是先捕获再抛出,而是第一次抛出的时候,如
public int divide(int a,int b) throws DivideZeroException {if(b == 0)
throw new DivideZeroException("can't divide 0")
return a / b
}
然后:先捕获再抛出,是这样用的。
public int doSomeThing(int x, int y) {try {
int a = divide(x + y, x - y)
int b = divide(x - y, x + y)
return a * b
} catch (DivideZeroException e) {
throw new RuntimeException("do some thing error", e)
}
}
而且也可以不抛出,在本级就处理了。
public int doSomeThing(int x, int y) {try {
int a = divide(x + y, x - y)
int b = divide(x - y, x + y)
} catch (DivideZeroException e) {
Logger logger = Logger.getLogger(getClass())
logger.info("do some thing error", e)
return -1
}
}
你问到:使用了throws的方法中即使没有throw,也依然可以抛出异常啊
回答:那是因为抛出的异常不是你手动抛出的,而是来自于你调用的方法(其根源还是在这个方法中用throw抛出的,或者是这个方法调用的方法)。