一.什么是异常
程序在运行过程中出现了问题,导致程序不能正确结束
二.产生异常的原因
1 语法错误(编译不能通过)
2 逻辑错误(最可怕。能运行,1+1 = 3)
3 运行时错误,异常。(有时代码是没有问题。使用的人出问题了)
三.异常的分类
在java中针对异常处理进行设置。提供大量的异常类。
每个异常类对应了程序运行时发生的一种错误情况。
(1)异常分为两种类型:
Throwable是所有异常的父类,
它的子类是Exception,Error,
Exception 异常类 常说的异常父类,表示所有的异常,是程序中只负责
Error为程序外部错误,程序本身不可控制。错误类 运行时方式的重大错误
(2)Exception 分为两种类
在Exception类中分成二大阵营。
1 RuntimeException的子类:非检查异常:是在程序中不用强制处理的异常类。
不是代码的方式回避,就是只能修改源文件。运行异常RuntimeException 所有运行时异常都是RuntimeException的子类
2 非RuntimeException的子类:检查异常:是在程序中必须处理的异常类。
四常见的运行时异常有:
ArrayIndexOutOfBoundsException 数组下标越界异常,
NullPointerException 空指针异常,
ArithmeticException 算术为0异常
,NumberFormatException 数字格式异常,
ClassCastException 类型转换异常
运行时异常不是需要必须处理的
检查异常 CheckedException所有的检查异常都是Exception的子类
五.常见的检查异常
FileNotFoundException 文件找不到异常
IOException 文件流异常
ClassNotFoundException 类找不到异常
SQLException 数据库异常
检查异常不是需要必须处理的
六定位异常抛出的位置
寻找第一句自己编写的代码
七处理异常的方法
异常处理的方法一共有两种:
throws 和 throw 抛出异常 Try catch finally 捕获异常
第一种方法 throws 和 throw 抛出异常
throw 抛出异常,需要抛出一个异常对象,在方法中
throws 声明异常,在方法定义的时候,当方法中抛出的是运行时异常该方法可以声明异常也可以不声明异常
如果方法中抛出了检查异常,则必须在方法中做出异常的声明
如果方法中抛出了多个检查异常 需要在声明的时候可以直接声明多个异常也可以直接声明一个父类异常(Exception)
抛出异常声明在方法上:
第二张方法 Try catch finally 捕获异常
(1)异常处理的第二种方法
try 捕获异常 catch 处理异常 finally 必须执行
(2)try{ 程序代码; }catch(Exception ex)
{ 1:抛出,2:打印异常信息,3:记录日志信息 }
finally{ 释放资源 }
说明:
其中catch是可以省略的,finally也是可以省略的但两不能同时省略(try 不能单独存在)
finally 只能出现一次,catch可以出现多次
异常处理的时候方法返回值问题
如果在方法中存在try{} catch finally ,且finally中存在return 则方法不论是否存在异常都会返回finally中值
如果try存在return ,catch中存在return try外面不能出现return 子句
捕获异常特点:
八 throw和throws区别
1.throw是函数体中使用,而throws是在函数声明上使用的
2.throw后面跟着的是异常对象,而throws跟着的是异常类型
3.throw后面只能跟一个异常对象,throws后面可以声明多个异常类型
九 自定义异常
在java中不同的异常类型,有指定的异常来表示,sun公司给写好了好多异常类
Sun公司提供异常有可能不能满足于我们,生活中我们会遇到各种异常情况,比如没有网络,吃饭忘记带钱,恋爱分手。需要我们根据特殊情况进行定义一个异常出来。
如果定义一个检查异常只需要继承 Exception就可以
如果定义一个运行时异常需要继承RuntimeException就可以