企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 异常 ### 一、生活中的异常: 感冒,癌症 ### 程序中常见的异常: ```ArrayIndexOfBoundsException``` :数组的下标越界异常 ```classCastException``` :类型转换异常 ```IOException``` :流异常 ```NullPointerException``` :空指针异常 ```Error``` :错误,往往不是 ```Exception``` :所有异常类的父类 ## 二、异常的定义: **异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。** > 异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行 ### 异常分为编译期异常和运行期异常: 1. 编译期出现的异常必须解决 2. 运行期的异常根据情况选择解决 ## 三、处理异常的三种方式: ### 1. ```try catch``` 语法: ```java try{ 可能出现异常的代码块; }catch(异常类型){ 处理异常的代码块; } ``` #### try catch 延伸的语法: ##### 1) ```catch``` 可以有多个代码块 ```java try{ 可能出现异常的代码块; }catch(异常类型){ 处理异常的代码块; }catch(异常类型){ 处理异常的代码块; } ``` > 如果多个catch 中异常类型有一定的关联,那么异常类型的范围应从小到大排序 ##### 2) catch 代码块后面加上 ```finally```代码块 ```java try{ 可能出现异常的代码块; }catch(异常类型){ 处理异常的代码块; }catch(异常类型){ 处理异常的代码块; }finally{ 代码块: 不管你try代码块里面的内容是否有异常,我finally代码中的内容都会被执行 往往用做释放资源的事情 } ``` > 面试题:```final``` ```finally``` ```finalize``` 三者的区别? > > - final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。 > - finally是异常处理语句结构的一部分,表示总是执行。 > - finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。 ### 2. ```throw``` 语法: 声明在方法体内,在方法体内向外抛出具体的异常实例。 ```java ``` ### 3. ```throws``` 语法: 一般声明在方法的后面,自己不去解决这个异常,谁调用该方法,谁去解决 ### 四、throw 和 throws 区别? A: 有throws的时候可以没有throw。 ​ 有throw的时候,如果throw抛的异常是Exception体系,那么必须有throws在方法上声明。 B: throws用于方法的声明上,其后跟的是异常类名,后面可以跟多个异常类,之间用逗号隔开 ​ throw用于方法体中,其后跟的是一个异常对象名 ## 五、自定义异常: 只需继承 ```Exception``` 异常即可,声明无参构造函数和有参构造函数