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参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。
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参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。
相关文章推荐
- Java Exception
- java exception使用的性能影响,用数据说话
- Java Exception
- java Exception 类
- java exception
- Java Exception打印到日志
- java EXception
- java exception
- Java Exception 捕获和显示实例详解
- JAVA Exception异常总结(JAVA Exception面试笔试总结)
- Java Exception 捕获和展示
- Java Exception和Error的差别
- Java Exception
- Java Exception处理之最佳实践
- Java Exception
- java exception
- Java Exception
- java Exception
- java Exception: NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory
- Java Exception: MISSING EXCEPTION