异常

异常

1、什么是异常

哪些不是异常

  语法错误

  逻辑错误

不可预知的非正常的情况

  例如:网络中断,用户不合适的输入,硬盘已满,操作系统崩溃,内存溢出等

2、异常的体系结构

java.lang.Throwable

  所有异常和错误的超类

  (1)只有这个类型或它子类的对象才能被“抛出”

  (2)只有这个类型或它子类的对象才能被“捕获”

分为两大类

java.lang.Error

  严重

  例如:VirtualMachineError

    StackOverflowError

    OutOfMemoryError  简称OOM  如何解决:设计合理,修改JVM参数

java.lang.Exception

  运行时异常RuntimeException

    空指针异常:NullPointerException

    数组下标越界异常:ArrayIndexOutOfBoundsException

    类型转换异常:ClassCastException

    算术异常:ArithmeticException

    数字格式化:NumberFormatException

  编译时异常,受检异常

    在编译阶段必须要求你编写代码去处理,否则编译不通过

    例如:SQLException,IOException等

异常的处理机制

1、过程描述

  Java虚拟机会在发生异常的那句代码的位置,创建一个异常的对象,并且抛出,这个时候,它会检测有没有try..catch,如果有对应的catch,那么程序正常运行,如果没有合适的catch,会被往上抛出,如果一路上都没有被catch,最终会导致程序终止运行。

2、两种方式

  try...catch

//语法结构
try{
    可能发生异常的代码
}catch(异常的类型 e){
    捕获该异常后如何处理
}catch(异常的类型 e){
    捕获该异常后如何处理
}catch(异常的类型 e){
    捕获该异常后如何处理
}
...
finally{
    不管是否发生异常都要执行的代码
}

下面的代码

    执行特点

      (1)如果try中没有异常,那么如果有finally,就执行finally,然后再执行[下面的代码]

      (2)如果try中有异常,try剩下的代码就不执行了,直接去找对应的catch,如果有对应的catch,就执行,然后如果有finally,就执行finally,然后再执行[下面的代码]

      (2)如果try中有异常,try剩下的代码就不执行了,直接去找对应的catch,如果没有对应的catch,然后如果有finally,就执行finally,[下面的代码]就不执行,抛出上级

    语法特点

      可能没有catch

      可能没有finally

      多个catch异常类型的顺序是"子上父下"

    return和finally并存如何执行

      如果finally中有return,那么一定是从finally中返回

      如果finally中没有return,会先执行finally中的语句,然后return结束,但是返回的值是在执行finally之前就赋好值的

  throws

//语法结构
[修饰符] 返回值类型  方法名(形参列表) 抛出的异常列表

    注意

      (1)throws后面可以是多个异常,不分顺序

      (2)如果方法重写 重写方法抛出的异常<=被重写方法抛出的异常类型

自定义异常

1、自定义异常一定要继承Throwable或它的子类

  原因是因为

    (1)只有这个类型或它子类的对象才能被“抛出”

    (2)只有这个类型或它子类的对象才能被“捕获”

2、一般来说声明两个或以上的构造器

  (1)无参构造

  (2)异常类型(String message)

3、都需要序列化

4、自定义异常的对象只能自己new并手动抛出,使用throw关键字

  当然抛出后,就可以通过throws继续往上抛或使用try..catch处理

异常的关键字

try  尝试执行某些代码,看是否发生异常

catch  捕获异常

finally  不管是否发生异常都要执行的代码

throw  手动抛出异常(系统预定义异常   用户自定义异常)

throws  把异常抛出上级

异常

  1、JVMnew并且抛出

  2、自己new并通过throw抛出

处理

  1、throws继续抛给上级

  2、当下处理try..catch

捕获

  try...catch

posted @ 2023-03-06 14:39  LuckySnail  阅读(40)  评论(0)    收藏  举报