公司介绍 产品展示 业务支持 解决方案 文档资料
网站导航 访客留言 技术论坛
     
     
  产品资料
  业界动态
  JAVA技术


首  页 > 文档资料 > 产品资料  
 
  Detail Exception

在日常的代码检查中,经常要检查代码中对Exception的处理情况,许多程序员简单处理,不捕获具体的异常,就是一个catch语句,捕获所有Exception,处理也非常简单,e.printStackTrace(),代码如下:


try
{
……..
} catch(Exception e)
{
e.printStackTrace();
}

这样的代码不便于理解,对程序中抛出的Exception都是未知。这个时候需要更改这些代码,要求捕获具体的异常,如FileNotFoundException,SQLException等,这样代码更容易理解,同时要求要将StackTrace以日志方式记录下来,就是使用Jakarta的commons-logging包,这是需要重新更改代码中的catch语句,改成如下:


try
{
……..
} catch(FileNotFoundException e)
{
logger.error(“Exception”,e);
}catch(SQLException e)
{
logger.error(“Exception”,e);
}

如果有多个catch语句代码修改工作量挺大,而且是简单重复的劳动。其实IDEA有一个很便利的做法,可能不被大家了解,能够将这一过程简化,那就是Detail Exception。

首先我们要修改一下IDEA默认对Exception的处理,打开“File Template”设置项,选择“Code”标签,然后将“Catch Statement Body”的内容改为自定义的异常处理语句,这样IDEA以后就会按照自定义的方式处理Exception。回到编辑窗口,在将光标置在“try”上,然后按下“Alt+Enter”,在弹出的Intention列表中选择“Detail Exception”,回车后,IDEA自动会将语句快中抛出的所有异常进行分别捕获,Exception的处理也就会按照我们设定的方式进行,就此告别只捕获Exception、e.printStackTrace()的code smell吧。

在以下的代码中,你只需在try上按下Alt+Enter,选择“Detail Exception”即可。


Connection conn=null;
try
{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "");
ResultSet rs = conn.createStatement().executeQuery("select current_date");
if (rs.next())
System.out.println("current time:" + rs.getString(1));
rs.close();
} catch(Exception e)
{
e.printStackTrace();
} finally
{
closeConnection(conn);
}

总结:虽然Detail Exception只是优化代码中很小的一部分,事实上IDEA的每一部优化都是很小的,但是正是由于这些细小的优化,让你的代码质量有了很大地提高。你可能在一行代码中犯下致命的错误,但是不可能在一行代码中更改系统的代码质量,质量是一步步积累起来的,现在就行动起来。