【写在最前】
Java语言自1995年问世以来,在编程语言市场一直占据最主流的地位,至今无人撼动。
我们在平时的 java 编程学习中,经常会接触到“ 异常 ”这个概念;
但是很多初学者并不能(或误认为已经)很好的从宏观上把握和理解他。甚至是在查阅了很多资料之后仍然是云山雾罩。
如果你感觉不能很好的回答上面这些问题,那么通过本文知识,让我们花5分钟时间彻底搞懂它,相信聪明的你,看完一定会有收获!
# Exception异常和Error错误的区别
Exception异常:
一般都是由程序本身造成和抛出,也都能被程序本身处理;
Error错误:
一般是由 JVM 造成和抛出,应用程序本身并没有办法处理。(比如:OutOfMemoryError内存溢出错误)

java中的可抛出对象层次分支图解
# Exception异常的类型
共分为两大类:
1)可检查异常:
特点是 Java编译器 会检查它,即当程序出现这类异常时,
即可以用try-catch语句捕获它,也可以用 throws 声明继续往上层抛出它.
IOException、SQLException、InterruptedException、自定义异常等,都属于可检查异常。
2)不可检查异常(运行时异常):
RuntimeException及其子类属于不可检查异常。
程序中可以选择捕获处理,也可以不处理。
这些异常一般是由程序逻辑错误引起的,也应该从编码时尽可能避免这类异常的发生。
举例:
1)若试图使用 空值 对象引用,则会抛出 NullPointerException 空指针异常;
1)若试图访问数组越界元素,则会抛出 ArrayIndexOutOfBoundException 异常;
try…catch 和 throw 的适用场景
判断标准其实非常简单清晰:
1)当你认为某段代码可能会出异常,并且需要你来负责时,用try…catch
2)当你认为异常需别人负责处理时,就用throw抛给它
3)当你自信绝对不会出异常时,就什么都不用。
# 关于 catch 和 finally
一段代码中,
1) catch可以罗列写出多个 ,比如先 catch IOException,再catch SQLExcpetion
2)虽然可以写多个 catch ,但是 只有1个catch会有匹配和捕获异常类型的机会 ,即 “ 多个catch并不会依次进入和处理 “。
由此,我们可以得出结论:编码时,应该尽可能的将“ 捕获具体异常类的catch子 句放在前面” ,否则,catch子句将可能并不会被执行。
3) finally 块的语句始终都会被执行 。
无论是catch抛出了异常,还是在try块或catch块中定义了return语句,finally语句块也都会正常执行。
【全文完】
—————————————-
十年技术沉淀,只做原创文章;
及时关注作者,成就大牛之路!