首页 > 其他分享 >异常

异常

时间:2023-03-06 14:45:06浏览次数:26  
标签:抛出 try finally catch 执行 异常

异常

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

标签:抛出,try,finally,catch,执行,异常
From: https://www.cnblogs.com/woniupa/p/17183642.html

相关文章

  • 自定义异常
    自定义异常(日常用不到)自定义异常方法:继承异常类等价于我们创造一个类,可以在里面处理产生异常后拥有的逻辑自定义异常:publicclassExceptionGeekLeeextendsExcepti......
  • 异常处理
    异常异常定义异常指的是程序运行过程中出现不期而遇的各种状况,如:文件找不到,网络断开等所有异常的超类:java.lang.Throwable,分为Error和Exception两大类,前者是致命的,一般......
  • Java_异常链
    emm其实就是异常一直抛出传递,但是最后只会显示最后一个异常,这就是异常链。   需要用到Trowable的cause属性但是除了Error、Exception和RuntimeException外,都不存......
  • 类型转换异常ClassCastException
    Personp=newStudent();//父引用指向子类Students=(Student)p//向下转型,可以Teachert=(Teacher)p;//p指向的是student,而不是teacher//此时报ClassCastExc......
  • 已解决 springBoot HttpMessageConversionException的异常
    问题说明:近日重构springboot项目,启动后调用ControllerAPI异常提示:2022-12-0617:09:37.008javaERROR[http-nio-8080-exec-2]o.a.c.c.C.[.[.[.[dispatcherServlet]e......
  • 6.JavaScript异常处理的方式,统一的异常处理方案
    一般来说有两种处理方式①抛出异常functionopenFile(fileName){if(!exists(fileName)){thrownewError('找不到文件'+fileName)}//...}②捕......
  • YOLOv7_OBB 运行异常记录
    YOLOv7_OBB运行异常记录 (wind_2021)H:\PytorchProject\YOLOv7_OBB-main>(wind_2021)H:\PytorchProject\YOLOv7_OBB-main>pythondetect.py--weights'models/yol......
  • 定位Dll加载异常的方法
    总体说明动态库加载异常的原因有以下几种:1.dll不在dll搜索路径2.dll依赖的其他dll不在dll搜索路径3.dll与exe不是同一架构,如exe是64位,dll是32位4.dll或依赖的dll其导......
  • 定位解析一个因脚本劫持导致webpack动态加载异常的问题
    问题描述项目现场的前端项目在点击顶部的导航栏切换不同的模块时,会有小概率出现模块加载报错的情况:我们的前端项目里是有基于react-loadable做的懒加载的,上图的12.be789......
  • [C/C++] noexcept:承诺函数不抛出异常
    noexcept是新标准(C++11)引入的,其作用是我们承诺一个函数不抛出异常。标准库知道我们的函数不会抛出异常,就不会认为“函数可能会抛出异常”,而为这种可能性做一些额外的工作;......