在Java等面向对象的编程语言中, 异常本身是一个类
产生异常就是创建异常对象并抛出了一个异常对象。
Java中处理方式为 中断处理
java处理异常的五个关键字:try, catch, finally, throw, throws
使用throw关键字在指定的方法中抛出指定的异常
throw new xxxException("异常产生的原因");
注意:
1.throw关键字必须写在方法的内部
2.throw关键字后边new的对象必须是Exception或者Exception的子类
3.throw关键字抛出指定的异常对象,就必须处理这个异常对象
throw关键字后边创建的是RuntimeException或者RuntimeException的子类对象,我们可以不处理,默认交给JVM处理 throw关键字后边创建的是编译异常,我们就必须处理这个异常,要么throws,要么try...catch...
作用:
当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象,
可以使用throws关键字处理异常对象,把锅抛给JVM处理 --> 中断处理
修饰符 返回值类型 方法名(参数列表) throws AAAException{ throw new AAAException("产生原因"); }
2.throws后面声明的异常必须是Exception或者Exception的子类 3.方法内部如果抛出多个异常,throws后面也必须声明多个异常, 如果抛出的多个异常对象有父子类关系,直接声明父类 4.调用了一个声明异常的方法,就必须处理声明异常, 要么继续使用throws声明抛出,最终交给JVM 要么try...catch...自己处理异常
格式:
try { 可能产生异常的代码 }catch(定义异常的变量,用来接收try中抛出的异常对象) { 异常的处理逻辑,之后是如何处理异常对象 一般工作中,会把异常的信息记录到一个日志中 } ... catch(异常类名 变量名) { }
注意:
1.可以抛出多个异常对象,可以使用多个catch
2.try中产生异常,执行catch,之后继续执行try...catch之后的代码
如果try中没有产生异常,就不会进入catch,执行完try直接执行后续代码
try...catch与throw的区别:
try...catch可以执行后续程序
throw则是中断程序
一定要执行的代码
无论异常发生不发生,都需要执行
而且出现程序跳转,部分代码会执行不到
格式:
try{ ... }catch() { ... } ... catch() { }finally { //无论是否异常均会执行的代码 }
注意:
1.finally必须和try一起使用
2.finally一般用于 资源释放 ,程序最后均要资源释放
1.多个异常分别处理
还可以执行后续代码
2.多个异常,一次捕获(try),多次处理(catch)
catch里边定义的 异常变量 ,如果 有父子类 关系,那么 子类的异常变量必须写在上边 ,否则报错(与多态知识相关)
对于try里面发生的异常,他会根据发生的异常和catch里面的进行匹配(怎么匹配,按照catch块从上往下匹配),
当它匹配某一个catch块的时候,他就直接进入到这个catch块里面去了,后面在再有catch块的话,它不做任何处理,直接跳过去,全部忽略掉。
public static int demo4() { int i = 0; try { return i; } finally { i = 12; System.out.println("finally trumps return."); return i; } } //输出结果 finally trumps return. 12
public static int demo5() { try { return printX(); } finally { System.out.println("finally trumps return... sort of"); } } public static int printX() { System.out.println("X"); return 0; } //输出结果 X finally trumps return... sort of 0