全面掌握Java的非常处理机制[Java编程]
本文“全面掌握Java的非常处理机制[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
你认为自己是一个Java专家吗?能否必定自己已经全面掌握了Java的非常处理机制?在下面这段代码中,你可以疾速找出非常处理的六个问题吗?
OutputStreamWriter out = ...
java.sql.Connection conn = ...
try { // ⑸
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery(
"select uid, name from user");
while (rs.next())
{
out.println("ID:" + rs.getString("uid") // ⑹
",姓名:" + rs.getString("name"));
}
conn.close(); // ⑶
out.close();
}
catch(Exception ex) // ⑵
{
ex.printStackTrace(); //⑴,⑷
}
作为一个Java程序员,你至少应当可以找出两个问题.但是,假如你不能找出全部六个问题,请持续阅读本文.
本文谈论的不是Java非常处理的普通性原则,因为这些原则已经被大大都人熟知.我们要做的是解析各种可称为“反例”(anti-pattern)的违反优异编码标准的常见坏习惯,帮忙读者熟习这些典型的背面例子,从而可以在实际工作中灵敏地发觉和避免这些问题.
反例之一:丢弃非常
代码:15行-18行.
这段代码捕捉了非常却不作任何处理,可以算得上Java编程中的杀手.从问题呈现的频繁程度和祸殃程度来看,它也答应以和C/C++程序的一个恶名远播的问题相提并论??不查抄缓冲区能否已满.假如你看到了这种丢弃(而不是抛出)非常的情形,可以百分之九十九地必定代码存在问题(在极少数情形下,这段代码有存在的来由,但最好加上完好的注释,免得惹起别人曲解).
这段代码的错误在于,非常(几近)老是意味着某些事情不对劲了,大概说至少发生了某些不平常的事情,我们不该该对程序发出的求救信号保持沉默和无动于衷.调用一下printStackTrace算不上“处理非常”.不错,调用printStackTrace对换试程序有帮忙,但程序调试阶段完毕之后,printStackTrace就不该再在非常处理模块中担负主要责任了.
丢弃非常的情形非常广泛.翻开JDK的ThreadDeath类的文档,可以看到下面这段阐明:“分外地,固然呈现ThreadDeath是一种‘正常的情形’,但ThreadDeath类是Error而不是Exception的子类,因为很多利用会捕捉全部的Exception然后丢弃它不再答理.”这段话的意思是,固然ThreadDeath代表的是一种普通的问题,但鉴于很多利用会试图捕捉全部非常然后不予以得当的处理,所以JDK把ThreadDeath定义成了Error的子类,因为Error类代表的是普通的利用不该该去捕捉的严重问题.可见,丢弃非常这一坏习惯是如此常见,它乃至已经影响到了Java本身的计划.
那么,应当怎样改正呢?主要有四个挑选:
1、处理非常.针对该非常采纳一些行动,比方改正问题、提醒某个人或举行其他一些处理,要按照具体的情形肯定应当采纳的行动.再次阐明,调用printStackTrace算不上已经“处理好了非常”.
2、重新抛出非常.处理非常的代码在解析非常之后,认为自己不能处理它,重新抛出非常也不失为一种挑选.
3、把该非常转换成另一种非常.大大都情形下,这是指把一个初级的非常转换成利用级的非常(其含义更简单被用户理解的非常).
4、不要捕捉非常.
以上是“全面掌握Java的非常处理机制[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |