异常处理
1.什么是异常?(重点)
异常是在程序中导致中断运行的一种指令流。
2.常见的异常及其含义。(熟悉)
异常指的是Exception ,Exception类,在Java中存在一个父类Throwable(可能的抛出)。
Throwable 存在两个子类:
1:Error:表示错误,是JVM发出的错误操作,无法用代码处理。比如:内存过小和内存溢出。
- Exception : 表示所有程序中的错误,一般在程序中进行try-catch的处理。
异常中分非受检异常(如:RuntimeException)与 受检异常 (如:IOException)。
受检异常:代码写出来就飘红。
非受检异常:在运行中才有可能出错。
想对异常进行处理,则必须采用标准的格式,处理格式语法如下:
try{
// 有可能发生异常的代码段
}catch(异常类型1 对象名1){
//异常的处理操作
}...
finally{
//异常的统一出口
}
try + catch 的处理流程
1、一点产生异常,系统会产生一个异常类的实例化对象。
2.此时如果异常发生在try语句,则自动找到匹配的catch语句执行,如果没有在try语句中,则会将异常抛出。
3.所有catch根据方法的参数匹配异常类的实例化,如果匹配成功,则表示由此catch进行处理。
一、发生了异常(JVM根据异常的情况,创建了一个异常对象,包含了异常对象)
二、main未处理,自动将异常抛给了main的调用者JVM
三、JVM 对异常信息进行了响应(将异常信息显示到控制台,中断处理)
finally
在进行异常的处理之后,在异常的处理格式中有一个finally 语句,那么此语句将作为异常的统一出口,不管是否产生了异常,最终都要执行此代码。
多异常捕获的注意点:
1.捕获更粗的异常不能放在更细的异常之前。
2.如果为了方便,则可以将所有的异常都使用Exception进行捕获。
特殊的多异常捕获方法:
catch(异常类型1 | 异常类型2 对象名){
//表示此块用于处理异常类型1 和异常类型2 的异常信息
}
throws 关键字
此关键字在方法的声明上用,表示方法中不处理异常,而交给调用处处理。
格式:
返回值 方法名称() throws Exception{
}
throw关键字
表示在程序中认为的抛出一个异常,从异常处理机制来看,所有的异常一旦产生后,实际上抛出的是一个异常类的实例化对象,那么此对象可以由throw直接抛出。
代码: throw new Exception(“抛着玩的”);
RuntimeException 与 Exception 的区别
注意观察如下方法的源码:
Integer类: public static int parseInt(String text) throws NumberFormatException
此方法抛出来异常,但是使用时却不需要进行try …catch捕获,因为NumberFormatException并不是Exception 的直接子类,而是RuntimeException的子类,只要是RuntimeException的子类,则程序在操作时不必使用try…catch进行处理,如果有异常发生,则由JVM处理,也可以通过try …catch 处理。
注意:
异常是否抛出去,应该站在哪个角度思考?
如果是因为传参导致异常,应该通过throws 将异常抛出去