异常
虽然大多数程序员都在致力于编写没有漏洞、不容易崩溃的程序,但这样的愿望并不存在。现实中,有很多的问题会在程序中发生。当然,java给我们提供了比较完整的异常处理机制,但即便这样,我们仍有可能需要自己去编写错误类来定义适应特定情况出现的错误,其方法也很简单,即继承Throwable类(或它的子类)。
异常类有两种,他们分别继承了Throwable(所有异常类的超类),他们是Error、Exception类,前者多由于虚拟机内部错误所引起,所以对于我们来说,我们不需要考虑如何处理Error,但Error往往是致命的。这个类旨在Java需要时能够使用他们。至于Exception类,它又可分为两种,一种为运行阶段异常(RuntimeException及其子类),一种是其他异常。
在继承环境中,子类可以继承父类抛出异常的方法,并抛出父类异常及其子类,或者干脆不抛出异常。
在try..catch..语句中,可以嵌套,但catch的所有异常如有继承关系,并且超类来列在子类异常的前面的话,这样超类将永远不会被执行。
虽然在方法或类后面标注throws就意味着需要在调用此方法的时候用try catch,但三者之间仍然可以使用嵌套,例如如下技术的写法
public void readMessage() throws IOException {
MessageReader mr = new MessageReader();
try {
mr.loadHeader();
} catch (IOException e) {
//do something
throw e;
}
}
虽然异常给了我们很好的处理一些问题的方法,但异常本身处理是非常耗费资源的。所以,异常 并不是我们最好的处理一些问题的方法,而是在可以预计并避免的地方,用简单的测试或者检验语句来避免过度的滥用异常,这将也成为优化系统的一个好办法。