对检查性异常和非检查性异常的理解

Posted 乐呵呵的小码农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对检查性异常和非检查性异常的理解相关的知识,希望对你有一定的参考价值。

 从开始学习Java,就学习了异常处理,知道异常分为检查性异常和非检查性异常,RuntimeException属于非检查性异常,知道异常的分类。但工作之前没有很多的实际应用,知识书本上课件上的定义,对两种异常的理解并不是很清楚。工作后在实际代码中,逐渐捋顺清楚了,这里记录一下,基础知识就不说了,书上课件上网上资料很丰富,这里只总结对两种异常的理解。
 
1、检查性异常: JAVA编译器强制要求用try{}catch(){}块进行处理,如果不处理则必须在包含可能发生异常的代码的方法上用throws显示地抛出异常,由调用该方法的方法catch捕捉处理异常,否则程序编译不会通过,会有红叉提示。
如:
 

 

这里必须要用try  catch块将代码包围起来或者throws显式 抛出异常,否则编译不会通过。
 
2、非检查性异常:JAVA编译器可以通过的异常,可以用try{}catch(){}进行处理,处理过后程序可以继续向下执行,也可以不处理,由调用它的方法进行处理。当然,也可以一直不处理,到了最上层,多线程的话线程会终止,单线程的话主程序会终止,也就是说运行时异常如果一直不进行处理,则会起到使程序停止的作用。
如:
 

 

这里虽然抛出了异常,但只是阻止程序继续运行,并不会编译报错,无需在方法上用throws语句显式抛出异常。

以上是关于对检查性异常和非检查性异常的理解的主要内容,如果未能解决你的问题,请参考以下文章

面试必问:Java 检查异常和非检查异常的区别?别理解错了。。。

面试必问:Java 检查异常和非检查异常的区别?别理解错了。。。

异常抛出与捕获的思考

Java检查型异常和非检查型异常

关于JAVA异常处理的20个最佳实践

java中异常的理解