异常处理
-
在 Controller 中,应尽可能少地捕获异常(即使用
try-catch
),而是应该使用拦截器来处理异常。 -
具体区分异常的类型,比如对于同一个代码块的IOException和FileNotFoundException,应该分别处理。
-
对于IO流或锁操作等,需要在finally块中释放资源。注意在释放前先判空,避免NPE。
-
不能在finally块中使用return、continue、break等跳转语句,否则可能会导致控制流错误。
-
不用
e.printStackTrace()
来打印异常信息,而是应该使用日志记录器log.error(e.getMessage())
记录异常信息。因为前者打印的东西太多不利于问题定位,而且可能导致敏感信息被泄露。 -
不要在捕获异常之后再抛出新的异常,否则可能会导致异常链,使问题定位变得困难。
-
优先使用标准的异常类,比如IOException、IllegalArgumentException等,而不是自定义异常类。
-
对于一些常见的异常,比如空指针异常、数组越界异常等,可以考虑使用断言
assert
来进行检查,而不是大量使用system.out.println()
来输出异常信息。