您的位置:首页 > 编程语言 > Java开发

Java Exception

2011-11-13 22:05 330 查看
1.什么是Error

Error是指严重的系统错误,一般指与JVM相关的问题,如系统崩溃,JVM出错,动态链接失败,内存耗尽等。这类错误无法恢复或不可捕捉,将应用程序中断。

2.什么是Exception

异常是程序运行期间对例外情况(非正常情况)的处理方式。异常的作用是从错误中恢复信息,列出异常信息,对问题进行处理。

发生异常时,异常对象被自动提交给JVM,JVM寻找处理这一异常的方法,称为捕捉异常。如果找不到可又捕捉异常的方法,则应用系统中断,java程序退出。



检查性异常:java.lang.Exception
具体应用负担的责任。

运行期异常:java.lang.RuntimeException
程序负担的责任。

错误:java.lang.Error
JVM负担的责任。

3.throw 和 throws

throws声明。如何得知方法会抛出异常,方法声明中有throws语句。

throw抛出异常。

4.抛出与捕捉

编写可能会抛出异常的方法时,必须声明异常。

调用可能会抛出异常的方法时,必须捕捉异常。

处理异常情况:把调用放在try/catch块中,将异常处理/恢复程序放在catch块中。

5.受检异常

受检异常是程序运行时由外界因素造成的。

编译器会检查除RuntimeException外的异常。确定调用者了解调用的方法是有异常的。如ClassNotFoundException,FileNotFoundException,IOException,SQLException.

6.非受检异常RuntimeException

非受检异大部分是由于程序逻辑造成的,程序员应该积极避免。如ClassCastException,ArrayIndexOutOfBoundsException,NullPointerException,ArithmeticException(除0异常)。

7.try、catch、finally

程序正常运行时,执行try块中的内容,不执行catch的内容。

程序某行发生异常时,其后的程序不再执行,而执行catch块。

finally是无论发生异常与否都会执行。如果try/catch中有return指令,finally还是会执行,流程会跳到finally再回到return语句。

8.多重异常

发生哪种类型的异常,执行哪个异常块。如发生B类异常,则执行b。

如果发生B类异常,e会不会执行?不会,JVM从头开始找到符合的catch块,找到后就会知道其余的都是没用的。

try{

...

}catch(AException a){

...

}catch(BException b){

...

}catch(Exception e){

...

}

9.异常的多态

异常也是对象,可以以异常的父类型来声明抛出的异常。比如,上述例子中可以只有最后一个catch块。

什么时候用多态呢?如果两种异常的处理方式不同,则分开写,这样更容易知道发生的是哪种异常。如果两种异常处理方式相同,则可以用多态声明父类异常。

10.duck 声明

当A调用的方法B有异常时,可以选择不去catch,而把异常duck掉让调用A方法的C去catch。也就是不处理异常,一直往上抛,但是当main方法也不去catch这些异常(也就是直接duck掉)时,jvm只好中断。

http://lavasoft.blog.51cto.com/62575/18920/转:
1、避免过大的try块,不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。

2、细化异常的类型,不要不管什么类型的异常都写成Excetpion。

3、catch块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么转译,要么重新抛出新类型的异常。

4、不要把自己能处理的异常抛给别人。

5、不要用try...catch参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: