Java之异常处理try{}catch(){}

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38225558/article/details/82054100

try {
     可能出现异常的代码(包括不会出现异常的代码)
} catch (Exception e) {          //()里为接收try{}代码块中出现异常的类型
     如果出现异常时的处理方式
}

try-catch的执行顺序:

①从 try{ } 代码块中第一行开始执行,执行到出现异常的代码,jvm会创建一个异常对象
②判断catch中声明的异常类型是否能捕捉到jvm创建的异常对象
       i:  能捕捉到:直接跳到catch代码块中执行。  不会结束程序,继续从catch代码块后面的代码执行
      ii:  不能捕捉到:直接打印异常信息并结束程序
③try{} 中没有出现任何异常,把try中的所有代码执行完,跳过catch继续程序


注意:

1.能被catch捕捉到的条件 ==》try中创建的异常对象的类型与catch中声明的类型一致,或者是catch中声明的类型的子类。

2.如果只有一个捕捉指定类型的catch 只能捕捉对应类型的异常对象。  如果try中创建了其他类型的异常,捕捉不到。Jvm来处理异常

3.try{}代码块中存在多行代码会抛出异常的情况下,遇到第一个异常,后面代码的异常 只会被catch捕捉到异常信息但都将不会被执行

4.那么我们如何才能处理try{}中的每一个异常呢??

  ① 写多个catch : 每一个catch处理一种异常        ==>    try{ }catch(){ }catch(){ }catch(){ }
       效果:当try中出现了异常,直接跳到第一个catch处判断,是否能捕捉。
            a:能捕捉:直接处理。  然后跳过trycatch往后执行
            b:不能捕捉:跳到下一个catch继续判断。如果下一个能捕捉,重复第一步的效果
            c:所有catch都不能捕捉 ==> 交给jvm处理:结束程序,在控制台打印异常信息
  ② 写一个catch  要求:catch中的异常类型必须是try中抛出的所有异常的父类
        
    注意事项:写多个catch时,下边的catch声明的异常类型不能是上边的catch声明的子类。
                      多个catch时,异常父类必须在下边。   (没有继承关系时,就不用考虑此情况)

try{  }catch(){  }catch(){  }...finally{  }                   (catch可以有多个,也可以没有 ==》 try{ }finally{ })

特点:写在finally代码块中代码,一定会被执行到
注意:①执行了 return    也会执行finally
           ②但 执行 System.exit(0)   就不会再执行finally了!!!


ex1: (此时 Integer in = new Integer("1");  不会出现异常的情况下)


ex2: (此时 Integer in = new Integer("A1");  出现异常的情况下)


ex3:  多个catch


ex4 :1个catch


ex5: return不影响finally{ }代码块中代码的执行


ex6 :    执行 System.exit(0)   ==》 便不会再执行finally{ }代码块中代码

猜你喜欢

转载自blog.csdn.net/qq_38225558/article/details/82054100