接上文
异常
- 39.Java 中异常层级结构?
- 40.异常的处理机制?
- 41.三道经典异常处理代码题
39.Java 中异常层级结构?
Java的异常是分为多层的。
Throwable 是 Java 语言中所有错误或异常的基类。 Throwable 又分为 Error 和 Exception ,其中Error是系统内部错误,比如虚拟机异常,是程序无法处理的。 Exception 是程序问题导致的异常,又分为两种:
- CheckedException受检异常:编译器会强制检查并要求处理的异常。
- RuntimeException运行时异常:程序运行中出现异常,比如我们熟悉的空指针、数组下标越界等等
40.异常的处理机制?
针对异常的处理主要有两种方式:
- 遇到异常不进行具体处理,而是继续抛给调用者 (throw,throws)
抛出异常有三种形式,一是 throw,一个 throws,还有一种系统自动抛异常。
throws 用在方法上,后面跟的是异常类,可以跟多个;而 throw 用在方法内,后面跟的是异常对象。
- try catch 捕获异常
在catch语句块中补货发生的异常,并进行处理。
try-catch捕获异常的时候还可以选择加上finally语句块,f inally语句块不管程序是否正常执行,最终它都会必然执行
41.三道经典异常处理代码题
执行结果:31。
try、catch。ϐ inally 的基础用法,在 return 前会先执行 ϐ inally 语句块,所以是先输出finally 里的 3,再输出 return 的 1
try 返回前先执行 finally,结果 finally 里不按套路出牌,直接 return 了,自然也就走不到 try 里面的 return 了。
大家可能会以为结果应该是 3,因为在 return 前会执行 ϐ inally,而 i 在 finally 中被修改为 3 了,那最终返回 i 不是应该为 3 吗?
但其实,在执行 finally 之前,JVM 会先将 i 的结果暂存起来,然后 ϐ inally 执行完毕后,会返回之前暂存的结果,而不是返回 i,所以即使 i 已经被修改为 3,最终返回的还是之前暂存起来的结果 2。