异常

异常

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  阅读(64)  评论(0)    收藏  举报