目录
一、异常体系
二、异常使用
1、运用Java异常处理机制
2、异常处理的原理
3、异常流程的运行过程
三、一些异常的面试题
1、Java中的检查型异常和非检查型异常有什么区别?
2、throw和throws这两个关键字在java中有什么不同?
3、如果执行finally代码块之前方法返回了结果,或者JVM退出了,finally块中的代码块还会执行吗?
4、Java中final,finalize,finally关键字的区别?
error/Exception error:是指程序无法处理的错误,例如oom Exception:程序可以处理的,分为运行时异常(RuntimeException)和非运行时异常
有四种场景 a、第一种场景:finally语句不被执行的唯一情况就是先执行了用于终止程序的System.exit()方法 b、第二种场景:return语句用于退出本方法 c、第三种场景:finally代码块虽然return语句之前就被执行,但finally代码块不能通过重新给变量赋值的 方式改变return语句的返回值 d、第四种场景:建议不要在finally代码块中使用return语句
java异常—检查异常(checked exception)和未检查异常(unchecked exception)
检查型异常(CheckedException) 在Java中所有不是RuntimeException派生的Exception都是检查型异常。当函数中存在抛出检查型异常的操作时该函数的函数声明中必须包含throws语句。调用改函数的函数也必须对该异常进行处理,如不进行处理则必须在调用函数上声明throws语句。
检查型异常是JAVA首创的,在编译期对异常的处理有强制性的要求。在JDK代码中大量的异常属于检查型异常,包括IOException,SQLException等等。
非检查型异常(UncheckedException) 在Java中所有RuntimeException的派生类都是非检查型异常,与检查型异常对比,非检查型异常可以不在函数声明中添加throws语句,调用函数上也不需要强制处理。 常见的NullPointException,ClassCastException是常见的非检查型异常。非检查型异常可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。对于RuntimeException的子类最好也使用异常处理机制。虽然RuntimeException的异常可以不使用try...catch进行处理,但是如果一旦发生异常,则肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,在开发代码时最好使用try...catch的异常处理机制进行处理。