异常
异常机制已经成为判断一门编程语言是否成熟的标准,除了传统的像C语言没有提供异常机制之外,目前主流的编程语言中如;Java C# Ruby Python都是提供了比较完善的异常处理机制。
java的异常处理机制主要依赖于try、catch、finally、throw和throws五个关键字。
try:执行可能出现异常的代码
catch:捕获异常
finally:无论是否发生异常,此块代码总是能执行(除去一种情况System.exit(1))
throws:声明异常,声明一个方法可能抛出 的异常
throw:手动抛出异常
java的异常处理机制可以让程序具有极好的容错性,让程序更加健壮,当程序运行时出现意外情况时,系统会自动生成一个Exception对象来通知程序,从而实现将"业务功能实现代码"和"错误处理代码"分离,提供更好的可读性。
try-catch块
这就是 一个简单的异常模拟,有些人可能会说我用IF else 也可以避免这种问题的发生,的确,但是在真正的开发环境中如果用if去处理异常的话,可能会有一下几个缺点:
1.代码臃肿,加入大量的异常情况判断和处理代码
2.程序员 把相当多的时间都花在处理可能出现异常代码上,就减少了编写业务代码的时间,必须影响开发效率
3.很难穷举所有异常情况,程序仍旧不健壮。
4.异常处理的代码和业务代码交织在一起,影响代码的可读性,加大了日后程序的维护难度。
所以我们用异常来处理,不会针对一个点去处理,而是针对一个块去处理,try-catch
异常类的继承体系
常见的异常类之间的继承关系
知道了异常类的继承关系那么就好去理解多catch块,因为一块代码可能不会只出现一种异常那么针对一块代码我们可能要捕获很多异常,那么这个catch该如何写呢。
我们先来模拟输出错误:
再来模拟算术错误:
使用多重catch块时,catch快的排列顺序必须是从子类到父类,最后一个一般都是Exception类。
声明异常
这个时候我们用add方法的时候报错了。因为我们在add方法中声明了一个异常我们要么捕获它要么继续抛出:
第一种:继续抛出不管它
第二种:捕获异常并处理它
抛出异常
手动抛出异常代码: