一:Java的异常分类
异常对象都派生于Throwable类,如下所示
- Error类:系统内部错误,资源耗尽错误
- Exception类:分为IOException和RuntimeException异常。其中RuntimeException是程序运行错误导致的异常。
- 按照已检查和未检查分类:Error类和RuntimeException类是未检查的异常;IOException是已检查异常。
注意的点:
一个方法必须声明所有可能抛出的已检查异常,抛出异常的方法如下:
throw new EOFException();
创建异常类
如果遇到任何标准异常类都没有能够充分描述清楚的问题,我们只需要定义一个派生于Exception获Exception类子类的的类,如下所示:
class FileFormationException extends IOException
{public FileFormatExcception(){}
public FileFormatException(String gripe)
{
super(gripe);
}
}
然后接下来就可以抛出自己定义的异常了。
捕获异常
try/catch语句块
前面用throw抛出了异常,那总得有代码去处理它吧,try/catch语句块就是用来捕获前面抛出的异常并加以处理,如果try方法中的代码执行没有问题,就跳过catch句块,如果代码执行出现了问题,就执行catch句块,catch可以捕获多个异常,对于捕获到的异常,如果不知道如何处理,则将异常继续传递下去,让调用者去处理。
finally子句
如果try语句块中的方法抛出了异常,则程序会跳过这个方法执行,但是这个方法可能已经占有一些资源,需要将这些资源释放。强烈建议try/catch和try/finally语句块独立使用,这样可以提高代码的清晰度。更值得注意的是,如果try子句中有返回值,而finally子句中也用return 0;跳出方法,这个时候finally子句的返回值会覆盖try子句的返回值。
这一小节就到这里,下一小节我们继续讲异常里面的分析堆栈跟踪元素