异常的捕获和处理
异常的概述
异常
-
运行时异常
-
运行时异常(RuntimeException)是一种特殊的异常,它是在程序运行过程中可能出现的错误
-
-
编译时异常
-
编译时异常是指那些在编译期间无法修复的错误。这些错误通常与语法错误或类型错误有关。编译器在遇到这些错误时,会立即报告并停止编译过程
-
异常的体系结构
-
Throwable(异常的顶级类)
-
Error类(系统无法恢复的严重错误)
-
Exception类(用于程序抛出和处理的非严重错误)(异常层次类的根类)
-
受检异常(checked)(编译时异常)
-
IOException:IO异常的根类
-
FileNotFoundException:文件操作时找不到文件
-
-
-
不受检异常(unchecked)(运行时异常)
-
RuntimeException:运行时异常的根类
-
ArithmeticException:算数运算异常
-
lllegalArgumentException:方法接受到非法参数
-
ArrayIndexOutOfBoundsException:数组越界访问异常
-
NullPointerException:空指针异常
-
ArrayStoreException:数组存储异常,对象或数据类型不兼容
-
ClassCastException:类型转换异常
-
lllegalThreadStartException:试图非法改变线程状态
-
NumberFormatException :数据格式化 异常
-
-
-
-
java异常处理机制
捕获异常
-
try-catch
-
把可能出现异常的代码放在try语句块中,使用catch语句块捕获
-
语法结构 : try{ //可能出现问题代码块 }catch(异常类型 变量名){
//代码块 }
-
printStackTrace():输出异常的堆栈信息
-
getMassage():返回异常描述字符串
-
-
当try代码块中没有异常catch将不会执行
-
如果在try代码块执行时发现,抛出的异常在catch中没有声明,那么程序就会立即终止运行
-
-
try-catch-finally
-
无论try代码块是否发生异常finally语句中的代码都会执行
-
如果在try代码块或在catch代码块中有return语句,也先执行finally语句然后执行return
-
finally唯一不执行的情况是在异常处理代码块中执行了System.exit(1),退出Java 虚拟机
-
-
多重catch处理异常
-
catch后面括号中的异常类型遵循“先子后父”。
-
抛出异常
-
throws
-
声明方法中可能抛出异常,已通知调用者处理异常
-
语法格式: public void test() throws 异常类型{ }
-
throws在方法体外抛出异常
-
-
throw
-
throw关键字用来在方法体内部抛出异常
-
一般用来抛出自定义异常
-
-
throws和throw的区别
-
1.throw用于程序员自行产生并抛出异常,throws用于声明方法内抛出了异常。
-
2.throw位于方法体内部,可作为单独的语句使用;throws必须跟在参数列表后面,不能单独 使用。
-
3.throw抛出一个异常对象,只能是一个;throws后面跟异常类,可以跟多个。
-
自定义异常
JDK中的异常类型不满足需要时,可以自定义异常类
自定义异常类的步骤
-
1.定义异常类,并继承Exception或着RuntimeException
-
2.编写异常类的构造方法,向父类构造传入异常描述信息,并继承父类的其他实现方法。
-
3.实例化自定义异常对象,并在程序中使用throw抛出。
异常链
顾名思义就是将异常发生的原因一个传一个串起来,即把底层的异常信息传给上层,这样逐层抛出。