一、异常相关概念
1.异常(Exception):异常是程序在执行的过程中所产生的问题。Java语言的健壮性-异常就是其中一种体现。
在程序代码提供了异常处理机制
2.异常调用过程
二、异常是如何产生的
throw new 具体的异常类型();
注意:一个方法如果拥有异常处理的包裹,则其不一定需要返回值。这解决了,一些数据表达冲突的情况。
三、异常是如何处理的
异常处理的语法:
try{
编写代码(提前预知会出现异常)
}catch(异常类型 异常变量名称){
异常处理……
}catch(……){
}
异常处理的几种方式:
1、捕获这个异常,不让它沿着调用栈继续向下抛出;
2、捕获这个异常,并继续向下抛出;
3、不捕获这个异常,从而导致方法从调用栈中被弹出,异常对象继续抛给调用栈下面的方法。
4、捕获过程中没有出现任何异常,那么整个程序会正常执行。后续代码也会正常执行。
解释几个关键字的含义:
try 用来指定一块预防所有“异常”的程序;
catch 子句紧跟在 try 块后面,用来指定你想要捕捉的“异常”的类型;
throw 语句用来明确地抛出一个“异常”;
throws 用来标明一个成员函数可能抛出的各种“异常”;
finally 为确保一段代码不管发生什么“异常”都被执行一段代码;
三、finally关键字作用
finally 为确保一段代码不管发生什么“异常”都被执行一段代码。应用场景:释放资源
注意:
1、当finally关键字遇到return时,先执行return返回动作(没有真正的返回),再执行finally中的代码块,最后再回去执行return真正返回操作。
2、当finally遇到break关键字,和遇到return原理差不多。
3、特殊:当finally遇到System.exit(0); 不会去执行了,说白了System.exit(0)最终大哥。
四、异常类型
|- Throwable(所有异常类的父类)
|-Error(错误)
|-Exception(异常)
|-RuntimeException(运行时异常)
|-StringIndexOutOfBoundsException: 字符串下标越界异常
|-ArrayIndexOutOfBoundsException: 数组下标越界异常
|-NullPointerException: 空指针异常
|-ArithmeticException: 数字计算异常
|-ClassCastException: 类型转换异常
|-InputMismatchException: 输入错误匹配异常
……
|-CheckException(自己定义的、实际没有此类)编译期受检异常
|-ParseException: 日期解析异常
|-ClassNotFoundException: 类加载异常
|-InterruptedException: 中断异常
|-SQLException: SQL异常
|-IOException:IO异常
……
注意:
1、RuntimeException运行时异常,可以处理也可以不处理。如果不处理它会沿着调用栈继续向下抛出,直至JVM为止。
2、直接继承Exception编译期受检异常,它必须做处理。要么try catch处理,要么向上继续抛。在方法名后用throws 关键字声明函数可能要抛出的所有异常
编译期受检异常语法:
访问修饰 访问参数 方法名称(……) throws 异常类型,………{
存在编译期受检异常的代码
}
五、自定义异常
1.自定义运行时异常
需要继承RuntimeException
2.自定义编译期受检异常
直接继承Exception
六、抛出异常的顺序
1.抛出的异常顺序,子类异常必须在父类之前
2.异常在同一层时,只会抛出第一个产生的异常,之后的异常不会出现。
3.当异常不再同一层时,不同的异常都会被显示