Java异常

来源:互联网 发布:c函数返回字符串数组 编辑:程序博客网 时间:2024/05/22 16:55

1.处理异常

在Java中所有异常都是由Throwable继承而来,但在下一层分解为Error和Exception两个分支。Error类层次结构描述了Java运行时系统的内部错误和资源消耗错误。应用程序不应该抛出这种类型的对象。

Exception类层次结构可以分解为两个分支:一个分支是派生于RuntimeException的异常,另一个分支包含其他异常。”如果出现RuntimeException异常,就一定是你的问题。“

Java将派生于RuntimeException类或Error类的所有异常成为“未检查异常”,其他的异常成为“已检查异常”。

遇到下面的情况时才会抛出异常:

(1)调用一个抛出已检查异常的方法,例如,FileInputStream构造器。

(2)在程序运行过程中发现错误,并且利用throw语句抛出一个已检查异常。

(3)程序出现错误,例如,a[-1]=0会抛出ArrayIndexOutOfBoundsException异常这样的未检查异常。

(4)Java虚拟机和运行时库出现的内部异常。


如果一个方法有可能抛出多个已检查异常,就必须在方法的首部列出所有的异常类,每个异常类之间用逗号(,)隔开。但是,不需要声明Java的内部错误,就是从Error继承的哪些异常。同样,也不应该声明从RuntimeException继承的那些未检查异常。


对于一个已经存在的异常类,将其抛出非常容易:(1)找到一个合适的异常类;(2)创建这个类的一个对象;(3)将对象抛出。


如果子类覆盖了超类的一个方法,那么,子类方法中声明的已检查异常不能超过超类方法中声明的异常范围。

2.捕获异常

想要捕获一个异常,就必须设置try/catch语句块。try语句块的最简单的形式如下:

1
2
3
4
5
6
7
8
9
10
try
{
    code
    more code
    more code
}
catch(ExceptionType e)
{
    handler for this type
}

如果try语句块中的任何代码抛出了一个在catch子句中指定的异常类,那么

1)程序将跳过try语句块中的其余代码。

2)程序将执行catch子句中的处理器代码。

如果在try语句中的代码没有抛出任何异常,那么程序将跳过catch子句。如果方法中的任何代码跑出了一个在catch子句中没有声明的异常类型,那么这个方法将立刻退出。


通常,应该捕获那些知道如何处理的异常,而将不知道如何处理的异常传递出去。如果想将异常传递出去,就必须在方法的首部添加一个throws说明符,以便告知调用者这个方法可能会抛出异常。

参考:

JAVA2核心技术,第11章