java程序运行时,常出现非正常现象,称为运行错误,根据性质,可分为错误和异常。
java程序中,
所有抛出(throw)的异常都必须从Throwable派生而来。
类Throwable有两个直接子类:Error和Exception。
一般,最常见的错误有程序进入死循环、内存泄露等,此情况下,程序本身无法解决,只能通过其他程序干预,java对应的类为Error类。Error类对象由java虚拟机生成并抛出(通常java程序不对这类异常进行处理)。
异常是程序执行时遇到的非正常情况或意外行动,一下情况一般可引发异常:代码或调用的代码(如共享库)中有错误,操作系统资源不可用,公共语言运行库遇到意外情况(如无法验证代码)等。常见的有数组下标越界、算法溢出(超出数值表达范围)、除数为零、无效参数、内存溢出等。这种情况不像错误类那样,程序本身可以解决,由异常代码挑战程序运行方向,使程序仍可以继续运行,直至正常结束。
java异常对应的类为Exception类。
java异常处理的关键语句有5个:try,catch,throw,throws,finally,其中try,catch,finally要注意:
(1)try、catch、finally三个语句均不能单独使用,三者可以组成try..catch..finally, try...catch, try....finally三种结构,catch语句可以有一个或多个,finally语句最多一个。
(2)try,catch,finally三个代码块变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个代码块都可以访问,需要将变量定义到这些块外面。
(3)若有多个catch块,只会匹配一个异常类并执行catch代码,而不会再执行别的catch块,并且匹配catch语句的顺序是由上到下的。
----------------
throw和throws关键字的区别是:
throw关键字用于方法体内部,用来抛出一个Throwable类型的异常,如果抛出了检查异常,还应在头部声明方法可能抛出的异常类型。
throws关键字用于方法体外部的方法声明部分,用来声明方法可能抛出的异常。仅当抛出了检查异常,该方法的调用者才必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,而不是囫囵吞枣般地在catch块中打印堆栈信息来做处理。
----------------------------------------