Java的异常机制
异常是一个事件,是指在程序运行过程中,发生的一些中断程序正常运行的事件。Java提供了完善的异常处理机制。
Java的异常层次结构图如下:(盗的图)
Throwable是所有异常的父类,主要有两个重要的实现:Error和Exception:
Error:Error及其子类通常是用来描述Java运行系统的内部错误或是资源耗尽的错误,是程序无法处理的错误,这类错误比较严重,通常是JVM运行错误,或是资源耗尽时抛出错误,这里需要提及的是,在编写代码涉及递归调用时,一定要确保有结束条件,否则就会出现资源耗尽的情况.当出现Error的情况,JVM会停止线程继续工作.
Exception:可以在程序内捕获,进行处理.分为运行时异常和非运行时异常:
- 运行时异常:RuntimeException,运行时异常在编译时不会检测,也不要求强制处理
- 非运行时异常:除了RuntimeException的异常,在编译时要求强制处理.
异常的最佳实践
1 .不要忽略catch块中的异常
catch(IOException){
return null;
}
2 .在方法中抛出异常的时候,要抛出具体的异常,而不是Exception
3 .在catch块中捕获异常时,要捕获异常的子类而不是Exception
4 .禁止捕获Throwable类,因为该类包含Error
5 .异常信息要尽可能的完整,清晰
6 . 不要再finally代码块中抛出异常
7 .关闭连接之类的清理工作,要放在最后
8 .不是所有的异常都需要捕获,只需捕获可处理异常
9 .对异常的处理,要么打印异常信息,要么抛出异常,不要同时执行
10 .尽可能的避免e.printStackTrace()方法的使用
11 .如果不打算处理异常,使用finally代码块,而不是catch代码块
12 .只从方法中抛出异常
13 .不要在程序中使用流程控制异常
14 .有异常要尽早抛出,尽可能晚的catch
15 .多个try-catch代码块时没有意义的,尽可能晚catch,将所有的处理写在一个try-catch代码块中
16 .如果存在用户名,密码之类的验证,要写在最前面
17 .一个异常的信息,不要出现在多条日志中
18 .JavaDoc中要有异常的描述
能想到的就这些了,欢迎补充