异常分为:Checked异常和Runtime异常。
Checked异常都是可以在编译阶段被处理的异常,所以强制程序处理所有的Checked异常,要么声明(throws)抛出,要么显示用catch来捕捉。只有Java语句提供了Checked异常。
1、try…catch捕获异常
把系统的业务实现代码放在try块中定义,所有异常处理逻辑放在catch块中进行处理。
Java7提供多捕获异常:
多种异常之间用竖线|隔开;
异常变量有隐式的final修饰,因此程序不能对异常变量重新赋值。
finally回收资源
程序在try块里打开了一些物理资源(如数据库连接、网络连接和磁盘文件等),这些都必须显式回收。
finally块总会被执行。不要在finally块中使用如return或throw等导致方法种植的语句,一旦使用,将会导致try块、catch块中的return、throw语句失效。
try后圆括号里打开的资源,JVM可自动关闭。
2、throws声明抛出异常
当前方法不知道怎么处理这种类型的异常,该异常应由上一级调用者处理;如果main方法也不知道如何处理这种异常,也可以使用throws声明抛出异常,交给JM处理。
throw抛出异常
throw抛出的不是异常类,而是异常实例,而且每次只能抛出一个异常实例。
程序员自行抛出异常。
自定义异常
需提供两个构造器:一个无参数的构造器,一个带一个字符串参数的构造器。