Document

捕获异常

当程序运行过程中发生错误时 , 就会 ”抛巾异常” 。 抛出异常比终止程序要灵活得多, 这是因为可以提供一个 “捕获 “ 异常的处理器 (handler) 对异常情况进行处理。
如果没有提供处理器 , 程序就会终止, 并在控制台上打印出一条信息 , 其中给出了异常的类型。 可能在前面已经看到过一些异常报告 , 例如 , 偶然使用了 null 引用或者数组越界等。异常有两种类型: 未栓查异常和已检查异常己 对于已检查异常 , 编译器将会检查是否提 供了处理器。
然而 , 有很多常见的异常, 例如 , 访问 null 引用 , 都属于未检查异常。 编译 器不会查看是否为这些错误提供了处理器。 毕竟 , 应该精心地编写代码来避免这些错误的发 生. 而不要将精力花在编写异常处理器上。并不是所有的错误都是可以避免的
如果竭尽全力还是发生了异常 , 编译器就要求提供 一个处理器。 Class.forName 方法就是一个抛出巳检查异常的例子。
将可能抛出已检查异常的一个或多个方法调用代码放在try块中,然后在catch子句中提供处理器代码。
try
{
statements that might throw exceptions
}
catch (Exception e)
{
handler action
}

例子:

try
{
tring name= ... ; // get class name
Cl ass c 1 = Cl ass. forName (name); // might th row exception do something with cl
}
catch (Exception e)
{
e.printStackTrace();
}
如果类名不存在,则将跳过try块中的剩余代码,程序直接进入catch子句(这里,利用 Throwable类的printStackTrace方法打印出栈的轨迹。Throwable是Exception类的超类)。如 果try块中没有抛出任何异常,那么会跳过catch子句的处理器代码。对于巳检查异常,只需要提供一个异常处理器。可以很容易地发现会抛出已检查异常的 方法。如果调用了一个抛出巳检查异常的方法,而又没有提供处理器,编译器就会给出错误报告。