异常:
程序在运行期间,发生了不可预测的事件,它阻止了我们程序的正常运行!
异常处理机制:
在程序发生异常之后,代码能按照我们之前设计的顺序 继续执行!
所有异常和错误的父类==》Throwable
异常的分类:
01.运行时异常 RuntimeException
02.受查异常 CheckedException
IOException
FileNotFoundException 文件没找到
ArithMeticException 算术异常
InputMismatchException 输入类型不匹配
NullPointerException 空指针异常
ClassNotFoundException 没有找到类
ClassCastException 类型转换异常
异常处理分为两种方式:
1.try catch finally
01.try 不能单独使用,必须和catch/finally联合使用
存放可能出现异常的代码
如果try代码块中出现了异常,会去匹配catch代码块对应的异常类型,没有匹配的类型,直接进入finally
02.catch 可以有多个catch块,每个catch都能捕获一个异常
多个catch块捕获的异常类型不允许重复
多个catch块捕获的异常必须是从小到大排列
如果多个catch块都能匹配,默认使用第一个匹配的
如果try中没有发生异常,catch块被忽略
每个代码块中的变量都是私有的
03.finally 无论代码是否发生异常,都会执行的代码块
如果遇到了System.exit(0)或者System.exit(非0)不会执行finally
如果try代码块中出现了return 也是先执行finally 之后再跳出方法
后续关闭流,释放数据库链接资源
2.throw抛出异常,throws声明异常
01.throw抛出异常
语法:throw new 异常类型(异常信息)
异常类型必须是Exception或者其子类
一个throw只能抛出一个异常
只能出现在方法体内
针对于抛出的异常 两种方式解决
001.try catch finally
002.使用throws声明异常
抛出异常的类型必须是 声明异常本身或者是其子类
02.throws声明异常
语法:throws 异常类型1,异常类型2....
定义在方法的参数列表之后,可以声明多个异常
throws所在的方法不处理异常,方法的调用在去处理异常
如果在main方法中使用throws,则是JVM来处理异常
异常链的使用
把我们捕获的异常包装成一个新的异常,继续抛出!新异常中记录了异常的原始信息!
便于我们找到异常的根本原因!
自定义异常
01.异常类必须是Throwable的子类
02.自定义异常类 继承RuntimeException,Exception