异常的捕获与抛出:

RuntimeException或RuntimeException的子类都属于不受检查的异常,这种异常可以不用trycatch处理;

典型的有:

 NullPointerException

 IndexOutOfBoundsException

除了RuntimeException以外,继承自Exception的异常称为受检查的异常,这种异常我们必须try catch或重新抛出

通过try catch 语句来捕获并处理代码

 try{

。。。执行代码块

 }catch(异常类型 异常变量){

。。。异常处理代码

 }

注意:不能单独使用try或者catch

假如现在try catch了一段代码,当这个try语句块中的某行代码产生异常时,那么try语句块就终止执行,而去执行

catch中的代码。这个时候假如catch后面还有代码,那么这些代码会继续执行

假如此时不能确定怎样处理捕获的异常,那么可以重新抛出异常,抛出异常的关键字为throw

比如throw new RuntimeException(“我是运行时异常”);

对于抛出后的RuntimeException异常,在调用时可以不必用try catch来捕获并处理,但是对于Exception这类受检查异常,则首先需要在抛出异常所在的方法上加上异常声明,在调用抛出异常的方法时必须捕获并做相应处理或者重新抛出。

在方法抛出这类异常时,需要在方法签名后面加上异常声明,关键字为throws

比如 :

public static void test3() throws Exception

在调用这类方法(test3)时,必须try catch或者重新抛出

可以catch多层异常,catch的顺序是从子类到父类

不可以catch相同的异常

自定义异常:

在方法里面抛出这个异常

public static void test3() throws Exception{

 throw new Exception();

}

调用方法时必须处理这个异常,要么try catch,要么重新抛出。

try {

 test3();

 } catch (Exception e) {

 e.printStackTrace();

 }

finally关键字:

finally通常和try catch一起使用,无论发生异常与否,都会调用finally代码块,在一般情况下,我们会在finally代码块里实现资源清理的功能,比如数据库连接关闭,IO释放,Socket关闭等。

 finally{

 System.out.println(“我关闭了连接”);

 }