非常行使时的常见题目及留意事项
副问题[/!--empirenews.page--]
1、当子类重写父类的带有 throws声明的函数时,其throws声明的非常必需在父类非常的可控范畴内——用于处理赏罚父类的throws要领的非常处理赏罚器,必需也合用于子类的这个带throws要领 。这是为了支持多态。 譬喻,父类要领throws 的是2个非常,子类就不能throws 3个及以上的非常。父类throws IOException,子类就必需throws IOException可能IOException的子类。 2、Java措施可所以多线程的。每一个线程都是一个独立的执行流,独立的函数挪用栈。假如措施只有一个线程,那么没有被任何代码处理赏罚的非常 会导致措施终止。假如是多线程的,那么没有被任何代码处理赏罚的非常仅仅会导致非常地址的线程竣事。 也就是说,Java中的非常是线程独立的,线程的题目应该由线程本身来办理,而不要委托到外部,也不会直接影响到其余线程的执行。 1、将非常直接表现在页面或客户端 将非常直接打印在客户端的例子多如牛毛,一旦措施运行呈现非常,默认环境下容器将非常仓库信息直接打印在页面上。从客户角度来说,任何非常都没有现实意义,绝大大都的客户也基础看不懂非常信息,软件开拓也要只管停止将非常直接泛起给用户,必然要在前端展示层对非常举办封装后展示。今朝绝大大都应用都是前后端疏散的模式,这种直接打印非常的环境已经相对改进了许多,不外我们在编码时照旧要出格留意下这个原则。 2、忽略非常 如下非常处理赏罚只是将非常输出到节制台,没有任何意义。并且这里呈现了非常并没有间断措施,进而挪用代码继承执行,导致更多的非常。 public void retrieveObjectById(Long id) { try { //..some code that throws SQLException } catch (SQLException ex) { /** *相识的人都知道,这里的非常打印毫有时义,仅仅是将错误仓库输出到节制台。 * 而在 Production 情形中,必要将错误仓库输出到日记。 * 并且这里 catch 处理赏罚之后措施继承执行,会导致进一步的题目*/
ex.printStacktrace(); } } 捕捉了非常缺不举办处理赏罚,这是我们在写代码时辰的大忌,可以重组成: public void retrieveObjectById(Long id) { try { //..some code that throws SQLException } catch (SQLException ex) { throw new RuntimeException("Exception in retieveObjectById”, ex); } finally { //clean up resultset, statement, connection etc } } 3、将非常包括在轮回语句块中 如下代码所示,非常包括在 for 轮回语句块中。 for (int i = 0; i < 100; i++) { try { } catch (XXXException e) { //.... } } 我们都知道非常处理赏罚占用体系资源。一看,各人都以为不会犯这样的错误。换个角度,类 A 中执行了一段轮回,轮回中挪用了 B 类的要领,B 类中被挪用的要领却又包括 try-catch 这样的语句块。褪去类的条理布局,代码和上面千篇一致。 4、操作 Exception 捕获全部隐藏的非常 一段要领执行进程中抛出了几个差异范例的非常,为了代码简捷,操作基类 Exception 捕获全部隐藏的非常,如下例所示: public void retrieveObjectById(Long id) { try { //...抛出 IOException 的代码挪用 //...抛出 SQLException 的代码挪用 } catch (Exception e) { //这里操作基类 Exception 捕获的全部隐藏的非常,假如多个条理这样捕获,会丢失原始非常的有用信息 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |