封面
Java
程序设计
第9章 Java高级编程
异常处理
Java多线程机制
I/O数据流与文件处理
网络编程
数据库操作
异常处理
异常类的层次
抛出异常
捕获异常
finally子句
当程序运行的时候,经常会由于各种不可避免的原因而产生错误。例如除数为零、文件找不到而无法读写等等。Java提供的丰富的异常情况处理机制通常叫异常处理。异常处理把Java程序各种可能出现的错误都看作异常,集中起来统一处理。
程序员可以在程序中定义异常处理段来捕获和处理异常,说明何处可能出现异常,如何处理。这样,当异常发生时将被捕获和处理,使程序在出现异常的情况下能够继续执行,提高程序的健壮性。
异常类的层次结构
1. 异常处理的概念
异常在Java中也是作为类的实例的形式出现的。。其层次结构如下图所示。
2. 异常类的层次
Object
Throwable
Error
Exception
RuntimeException
IOException
RuntimeException类处理的错误包括:错误的强制类型转换、数组越界访问、空引用。
RuntimeException是程序员编写程序不正确所导致的异常,是在Java系统运行过程中出现的异常,如除数为零等。由于运行时异常可能会出现在程序的任何地方,而且出现的可能性非常大,因而由程序本身去检测运行异常出现与否,将会使程序的开销过大,所以编译器并不要求程序去说明或捕获运行时异常。理论上,程序员经过检查和测试可以查出这类错误。
抛出异常
Java提供了两种不同的异常抛出机制:
throws抛出异常——间接抛出异常
throw 抛出异常——直接抛出异常
1. throws 抛出异常
throws异常说明总是和方法说明出现在一起。这样,方法说明告诉编译器该方法可能会产生哪些异常,从而要求它的调用者必须考虑处理这些异常。
带throws异常说明的方法说明形式如下:
…方法名(…) throws 异常类列表
{ 方法体}
方法抛出的异常类是throws子句中指定的异常类或其子类。比如在方法的说明中指明方法可能产生IOException, 但是实际上可能抛出的异常或许是EOFException类的实例,这些异常都是IOException的子类。
并非所有可能发生的异常都要在方法中指定,从Error类中派生出的异常和从RuntimeException类中派生的异常就不用在方法声明中指定。这两类异常属于不检查异常。不检查异常则是那些无法干预的异常。 Java中的另一类异常是检查异常,检查异常是那些在程序中应该处理的异常,程序完全可以避免的异常(比如数组越界错误)。而throws异常说明必须指定有可能发生的检查异常。
class Test {……
public String getInput() throws IOException //抛出异常
{ ……
}
}
在下列情况下Java方法抛出异常:
(1)调用的方法抛出了异常;
(2)检测到了错误并使用throw语句抛出异常;
(3)程序代码有错误,从而异常,比如数组越界错误。
例. throws抛出一个异常
class Animation
{ // throws多个异常
public Image loadImage(String s) throws
EOFException, MalformURLException
{
……
}
}
例. throws抛出多个异常
java课件第9章(9.1异常处理)(精选) 来自淘豆网m.daumloan.com转载请标明出处.