开篇
异常是因为异常在我们的代码开发中是无法避免的一个问题,也是最常见到的问题,简单了解一下异常的组成,对Java的异常有一个初步的了解,最重要的是在实践中遵守几个处理异常的原则,尽量减少处理异常过多而带来的资源消耗和减少因为异常处理不当引起的生产事故。
Exception与Error的区别
都继承了Throwable类,在Java中,只有Throwable类型的实例才能被抛出(throw)或者捕获(catch),Throwable是异常处理机制的基本组成类型。
Error是程序性的错误状态,绝大多数的Error会导致程序处理不可用状态,所以基本不需要对Error进行捕获,常见的Error类型有OutOfMemoryError等。
Exception种类:
- 可检查异常,需要在程序编译时就进行检查
- 不检查异常,也是运行时异常,有NullPointerException等,是一般程序在运行中抛出的错误异常,一般在编码中可以尽量避免此类异常。
异常实践
- try-catch-finally,finally中关闭需要关闭的对象
- try(resource)-catch,可以自动关闭实现了Closeable或者AutoCloseable的资源: InputStream等。
- 不建议直接捕获Exception,最好针对性捕获特定异常
- 尽量不要使用
e.printStackTrace();
当日志数量众多的时候,该堆栈信息基本查看不到 - 如果非必要情况下,不能生吞异常(catch后不做处理)
- 添加异常日志时,尽量避免将敏感信息暴露在日志中,可能会造成数据泄露
- try-catch有性能开销,如非必要不要使用,使用时只将必要代码包住。
- 给用户侧展示的服务,最好有一个全局异常,进行log日志记录,并不将不必要的信息返回给用户,提高用户体验
总结
关于异常貌似没有太多要说的点,基本上就是对异常和错误进行区分,和理解一些异常的基本实现,实现自定义异常等,最最重要的是异常实践需要多花心思。