文章目录
Java 异常处理的注意事项
尽量不要使用e.printStackTrace(),而是使用log打印。
e.printStackTrace()语句产生的字符串记录的是堆栈信息,如果信息太长太多,字符串常量池所在的内存块没有空间了,即内存满了,那么,用户的请求就卡住啦~
用log正确打印异常格式
log.info(“你的程序有异常啦,{}”,e);
不要用一个Exception捕捉所有可能的异常
用基类 Exception 捕捉的所有可能的异常,如果多个层次都这样捕捉,会丢失原始异常的有效信息。
记得使用finally关闭流资源或者直接使用try-with-resource
注意异常对你的代码层次结构的侵染(早发现早处理)
反例:
public UserInfo queryUserInfoByUserId(Long userid) throw SQLException {
//根据用户Id查询数据库}
正例:
public UserInfo queryUserInfoByUserId(Long userid) {
try{
//根据用户Id查询数据库
}catch(SQLException e){
log.error("查询数据库异常啦,{}",e);
}finally{
//关闭连接,清理资源
}}
理由:
我们的项目,一般都会把代码分 Action、Service、Dao 等不同的层次结构,如果你是DAO层处理的异常,尽早处理吧,如果往上 throw SQLException,上层代码就还是要try catch处理啦,这就污染了你的代码~