1、ArrayIndexOutOfBoundsException:数组索引越界异常
通常原因:你访问了不存在的索引
2、NullPointerException:空指针异常
通常原因:数组已经不在指向堆内存了,而你还用数组名去访问元素。
3、RuntimeException:运行时异常
通常原因:表示你的代码本身存在BUG
详细解决方案:https://zhidao.baidu.com/question/329849523.html
4、ArithmeticException:算数异常(算术错误情形,如以零作除数)
通常原因 :当我们定义的除数为整数时(short、int、long)会抛出此异常,被除数为整数时不可为零
5、IllegalArgumentException:非法数据异常
通常原因:字面 非法参数 通常情况为找不到文件;有可能是没有通常是没编译,不排除其他情况
6、ClassNotFoundException:类无法加载异常
通常原因:类不能找到,一般原因都是部署的项目文件中没有这个类包
详细解决方案:https://www.cnblogs.com/xiangkejin/p/8798859.html
7、NumberFormatException:字符串到float类型转换异常
通常原因:数字格式异常
8、IOException:输入输出异常
通常原因:读写异常,一般在读写数据的时候会出现这种问题
9、FileNotFoundException:找不到文件异常
通常原因:路径配置错误 ;编译有问题,文件不存在
10、EOFException:文件结束异常
通常原因:当输入过程中意外到达文件或流的末尾时,抛出此异常
详细解决方案:https://www.cnblogs.com/yiwangzhibujian/p/7107084.html
11、InterruptedException:(线程)中断异常
通常原因:请查看下行链接
详细解决方案:https://www.jianshu.com/p/a8abe097d4ed
12、IndexOutOfBoundsException:下标越界异常
通常原因:通常是指数组下标越界异常
13、NegativeArraySizeException:创建一个大小为负数的数组错误异常
通常原因:如果应用程序试图创建大小为负的数组,则抛出该异常
14、ClassCastException:两个类型间转换不兼容异常
通常原因:(1).一个类是数字类,而由于误操作,错误的将数字类向数字类转换改写成了数字类向字符串类的转换,从而产生了异常。
(2).大部分原因是因为强制转换或者是SQL映射时发生了这个异常。
Exception参考资料:https://docs.oracle.com/javase/9/docs/api/java/lang/Exception.html
- try - catch
- try - catch - finally
- 多重catch
- throw
- throws
1、try-catch-finally结构中try语包块是必须的catch、finally语句块均可选,但两者至少出现之一
1.1、finally的作用
2、引发多种类型的异常
(1)排列catch语句的顺序:先子类后父类
(2)发生异常时按顺序逐个匹配
(3)只执行第一个与异常类型匹配的catch语句
3、存在return的try-catch-finally块:
//存在return的try-catch-finally块
public void method(){
try{
//代码段1
//产生异常的代码段2
} catch (异常类型 ex) { //Exception:异常类型匹配,ex:异常的对象---- 异常父类Exception接收异常子类---多态
//对异常进行处理的代码段3
return;
}finally{
//代码段4
}
}
3.1、return的try-catch-finally图解:
注:try-catch-finally中使用return的执行流程 --> 遇到异常时,先执行finally后执行return
4、throw与throws:
4.2、throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开
(1)调用者处理异常
(2)调用者继续声明异常
main()方法声明的异常由Java虚拟机处理
5、自定义异常:
借助代码理解自定义异常的定义和使用
(1)通过继承Exception父类创建自定义的异常类,处理异常情况根据实际应用需求。
步骤:定义异常类 --> 编写构造方法,继承父类的实现 --> 实例化自定义异常对象 --> 使用throw抛出
/**
* 在setAge(int age)中对年龄进行判断, 如果年龄介于1到100直接赋值,否则抛出异常
* 在测试类中创建对象并调用setAge(int age)方法,使用try-catch捕获并处理异常
*/
public class Years {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) throws Exception {
if (age >= 1 && age <= 100) {
this.age = age;
} else {
/*Exception e = new Exception("年龄必须在1-100之间!");
throw e;*/
throw new Exception("年龄必须在1-100之间!");
}
}
// 测试类
public static void main(String[] args) {
Years ys = new Years();
Scanner input = new Scanner(System.in);
System.out.print("请输入你的年龄:");
ys.age = input.nextInt();
try {
ys.setAge(ys.age);
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("谢谢使用");
}
}
}
(2)IO流异常:https://blog.csdn.net/weixin_41540362/article/details/102756500
自定义异常:
6、异常链与异常处理原则
(1)异常链
(2)异常处理原则
共勉:明日复明日,明日何其多。我生待明日,万事成蹉跎。