1、异常分为检查异常与非检查异常。对于检查异常,我们必须采用显式的thro嘛术铹砾ws或try...catch...finally进行处理,否则就会报错,例剧安颌儿如如下的程序。第一行有一个ClassNotFoundException,第二行有两个异常需要处理:InstantiationException, IllegalAccessException。它们必须在编译期显式地用代码解决。
2、第一种方式,直接使用throws关键字将这些异常全部抛出,不去处理。抛出方式有两种:第一种是分别抛出出现的各个子异常,如下所示。
3、第二种方式是直接抛出所有异常的父类Exception即可,如下所示。
4、接下来我们看一下如何使用try...catch...finally来处理。try{}中填写的是正常执行的代码,catch中填写异常处理代码,finally中放置资源释放的代码。我们看一个连接数据库的例子。
5、这里,首先在try...catch...finally外部定义了Connection,用于在finally中关闭连接。接着try中进行申请数据库连接。如果发生异常,则用后面的两个catch块愉桴狁焕进行处理,最后释放资源。正常的输出如下:
6、同样地,我们可以仅仅用一个catch块进行捕获,使用Exception这个父类即可。注意:不论有多少catch模块,最终最多只有一个模块会执行。因此如果一场之间有继承关系,子类的catch应该放在前面。
7、这里再看一个常见的异常处理错误。test方法中显式地抛出了异常,但是没有处理,因此会在编译过程报错。因此,本函数的方法必须在本函数内部实现处理。
8、如下是改进后的代码,使用了直接抛给调用者的策略。