异常介绍
对异常进行捕获,保证程序可以继续运行,提升程序的健壮性。
执行过程中所发生的异常时间可分为两大类:
-
Error: Java虚拟机无法解决的严重问题。如:JVM系统内部错误,资源耗尽等严重情况。比如:StackOverflowError[栈溢出]和OOM(out of memory),Error是严重错误,程序会崩溃
-
Exception: 其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理,例如空指针访问,试图读取不存在的文件,网络链接中断等等,Exception分为两大类:运行时异常[程序运行时发生的异常] 和 编译时异常[编程时,编译器检查出的异常。]
异常体系图
常见五大运行时异常
空指针异常(NullPointerException)
当应用程序时图在需要对象的地方使用null时,抛出该异常
ArithmeticException数学运算异常
当出现异常的运算条件时,抛出此异常,例如:除数为0
ArrayIndexOutOfBoundsException数组下标异常
当遍历数组时,索引为负或大于等于数组大小,则该索引为非法索引。
ClassCastException类型转换异常
当试图将对象强制转换为不是实例的子类时,抛出该异常。比如:
NumberFormatException数字格式不正确异常
当应用程序试图将字符串转换成一种数值类型,该字符串不能转换为适当的格式时,则抛出该异常。 → 使用异常我们可以确保输入是满足条件的数字。
编译异常
编译异常是指在编译期间,就必须处理的异常,否则代码不能通过编译。
异常处理
try - catch - finally
程序员在代码运行中捕获发生的异常,然后自行处理。
1、如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块
2、如果异常没有发生,则顺序执行try的代码块,不会进行到catch
3、如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等),则使用finally
4、可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,即异常之间有继承关系。如果发生异常,只会捕获一个异常。
5、可以try - finally配合使用,这种写法相当于没有捕获异常,因此程序会直接崩掉,
应用场景:就是执行一段代码,不管是否发生异常,都必须执行某项业务逻辑。