异常概述
异常是程序在“编译”或者“执行”的过程中可能出现的问题
比如:数组索引越界,空指针异常,日期格式化异常
为什么要学习异常
异常一旦出现,如果不提前处理,程序机会推出JVM虚拟机而终止
研究异常并且避免异常,然后提前处理异常,体现的是程序的安全,健壮性
异常体系
常见运行时异常
异常默认处理流程
编译时异常处理机制
编译时的异常是编译阶段就出错的,所以必须处理,否则代码根本无法通过
编译时异常的处理形式有三种
出现异常直接抛出给调用者,调用者也进行抛出
异常处理方式:throws
throws:用在方法上,可以将方法内部出现的异常抛出去给本方法的调用者处理
这种方法并不友好,发生异常的方法直接不处理异常,如果异常最终抛出去给虚拟机会引起程序的死亡
抛出异常的格式
方法 throws 异常1 ,异常2,异常3 …{
}
这种方式看起来会抛出多个异常,其实只会抛出第一个出现的异常,因为此时JVM虚拟机已经停止运行程序了
规范做法:
出现异常自己处理,不麻烦别人
异常处理方式:try…catch…
监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理
用这种方式还可以,放生异常的方法自己独立完成异常的处理,程序可以进行向下执行
格式:
规范做法:
这种异常处理的问题
方法直接处理返回值,如果多重套娃,方法调用方法,最深层的方法自己将异常处理并且不告诉上层是否正确执行,程序继续运行这样会导致如果最上层需要知道最深层的执行情况才能做进一步的处理,就会出现问题
前两者结合,出现异常直接抛出给调用者,调用者捕获处理(理论上的最好方法)
异常处理方式
方法将异常通过throws抛出去给调用者
调用者收到异常后直接捕获处理