在运行代码的时候经常会遇到爆红
,对于没学习过异常的新手来说真的是一个折磨,所以学习异常真的很有必要~~
文章目录
一、什么是异常
程序在运行时,可能由于外部系统的条件变更而导致程序可能会出错的情况。(也就是我们所熟知的
爆红
),例如:需要连接数据库但数据库未启动。
二、异常的体系结构
三、Throwable的描述
Throwable
是java语言中所有的错误和异常的超类,它有两个子类:Error
和Exception
。
Error:
代码层面解决不了的
Exception:
代码层面能够解决的,主要分为两种 -
CheckedException受检异常
,必须使用 try-catch 或者throw和throws。
UnCheckedException不受检异常
,主要由程序的逻辑引起的,具有不确定性,需要排查
四、异常处理
1、方法一: try - catch
捕获异常,用的最多且最实用
把有可能会出现异常的地方用try
语句块包裹起来然后在catch
语句块中编写要处理的逻辑代码
try{
double s = 10/0;
}catch (Exception e){
System.out.println("异常");
e.printStackTrace(); // 自带输出错误信息的方法
}
2、方法二:try - catch - finally
对于上面的进行了改进,不管是否发生异常,是否
catch
到相同的异常,都要输出finally
语句块中的内容。
打个比方
: 不管今天是否炒菜,火都得关掉
try{
double s = 10/0;
}catch (Exception e){
System.out.println("异常");
e.printStackTrace(); // 自带输出错误信息的方法
}finally {
System.out.println("不管怎样我都输出");
}
3、方法三 : throw和throws
如果
try
中使用了if
语句那么当语句不满足时将不会再执行catch
中的语句,所以这个时候需要使用throw
抛出异常,处理不了的异常就把它抛出去
。
语法
: throw new 异常类型([异常信息])
五、异常分析
这里直接看图片
注意 : 异常是向上传递的
六、自定义异常
1、创建异常
2、使用异常
七、各类异常的简短介绍
ClassCastException
两个类型间转换不兼容
1.一个类是数字类,而由于误操作,错误的将数字类向数字类转换改写成了数字类向字符串类的转换,从而产生了异常。
2.大部分原因是因为强制转换或者是SQL映射时发生了这个异常。
ArithmeticException
异常的运算条件
没有对0进行考虑,因为在进行一些算数运算的时候除数是不可为0的,此时就该用条件语句判断一下除数是否为0,否则就会抛出该异常。
IllegalArgumentException
不合法的参数异常
非法数据异常
或者无法通过一个标识或基本扩展转换将指定值转换为基础数组的指定类型
如果位置描述为空
如果指定对象参数不是一个数组
IllegalStateException
非法的状态
在进行ssh框架整合的时候,引入struts测试的action的时候出现的问题
IndexOutOfBoundsException
数组越界异常
索引超出边界异常,比如list中没有数据 你去取list[0] 没有这条数据 就汇报这个错误
或者说你list.size()是5 你取list[6] 也会报这个错误
NoSuchElementException
没有这样的元素异常。
出现这个异常的原因之一是因为线程访问越界
NullPointerException
空指针异常俗称NPE。
如果一个对象为null ,调用其方法或访问其字段就会产生