Java异常详解

异常概念:

异常(Exception) :是指程序在运行中的出现的错误,程序本身可以捕获并处理,异常能被程序本身可以处理,错误是无法处理。例如:在进行除法运算时,若除数为0,则程序运行时会自动抛出算数异常。

Java 异常 :也是通过一个对象来表示的,程序运行时抛出的异常,实际上就是一个异常对象,该对象中不仅封装了错误的信息,还提供了一些处理方法。

异常体系结构:

常见的异常类列表

注意:若不知道代码抛出是那种异常,可以指定它们的父类 Throwable 和 Exception。

异常分类:运行时异常和编译异常

1、运行时异常(不受检异常):RuntimeException类极其子类表示JVM在运行期间可能出现的错误。比如说试图使用空值对象的引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)。此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。

2、编译异常(受检异常):Exception中除RuntimeException极其子类之外的异常。如果程序中出现此类异常,比如说IOException,必须对该异常进行处理,否则编译不通过。在程序中,通常不会自定义该类异常,而是直接使用系统提供的异常类。

异常的处理机制

jvm默认的异常处理方式:在控制台打印错误信息,并终止程序。

抛出异常, 调用者处理 (throw/throws)

方法上直接throws抛出

捕获异常,自己处理 (try-catch(finally))
try {
       //可能产生的异常的代码区
   }catch (ExceptionType1 e) {
       //捕获并处理try抛出异常类型为ExceptionType1的异常
   }catch (ExceptionType2 e){
       //捕获并处理try抛出异常类型为ExceptionType2的异常
   }finally{
       //无论是出现异常,finally块中的代码都将被执行
   }

try catch finally 执行顺序结论

  1、不管有没有出现异常,finally块中代码都会执行;

  2、当try和catch中有return时,finally仍然会执行;

  3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,

       不管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;

  4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

  以下几种情况,finally代码块不会被执行:

  1、 在前边的代码中使用System.exit()退出应用。

  2、 程序所在的线程死亡或者cpu关闭

  3、 如果在finally代码块中的操作又产生异常,则该finally代码块不能完全执行结束,同时该异常会覆盖前边抛出的异常。

 

posted @ 2021-12-08 16:13  江南大才子  阅读(72)  评论(0编辑  收藏  举报