网站大量收购独家精品文档,联系QQ:2885784924

Java中正确的异常处理方式(10年软件工程工作经验的大牛讲解).pdf

Java中正确的异常处理方式(10年软件工程工作经验的大牛讲解).pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java中正确的异常处理方式(10年软件工程工作经验的大牛讲解)

看到很多朋友用 Java 的时候异常处理非常随便,因此把我写的书的节选发过来。节选自杨 中科《J2EE 开发全程实录》异常是Java 语言在语法层面提供的面向对象的例外处理机制, 属于核心的Java 特性,正确、有效的使用异常机制将会大大提高系统的开发效率和稳定性。 8.1.1. 异常处理的方式: 当程序进入某种不被期望的状态时,异常就被抛出了。Java 中的异常分为两种:受查异常 (checked exception)与非受查异常(unchecked exception)。非受查异常一般直接或者间接的从 RuntimeException 继承,其他的从Exception 类继承而非从RuntimeException 继承的即被称为 受查异常。受查异常是必须被处理的:或者在代码中处理或者将异常向上抛出。具体来说处 理方式有如下几种: u 吃掉异常 try { … } catch(ClassNotFoundException e) { //donothing } 异常是系统中的非正常行为,如果将异常吃掉,将会使这种非正常行为得不到暴露,有可能 会使得系统进入某种非预期状态。异常一旦发生了就一定要暴露出来,哪怕这个异常不需要 再次抛出,不需要额外的处理代码,那把异常打印出来也是有益的。 u 打印异常 这种处理方式比上一种好一些,因为它打印出了异常,能使我们观察到这个异常的存在,这 在很多试验性代码甚至是正式运行的代码中经常看到的。 try { … } catch(ClassNotFoundException e) { e.printStackTrace(); } 这种异常处理方式在试验性代码中出现是可以的,但是如果在正式运行的代码中出现则不能 被接受。e.printStackTrace()尽管很方便,但开销巨大。在磁盘 I/O 期间,e.printStackTrace() 对 I/O 处理进行同步,这极大降低了吞吐量。在缺省情况下,堆栈跟踪被记录到控制台。 但是,在生产系统中,浏览控制台以查看异常跟踪是行不通的。而且不能保证堆栈跟踪会显 示在生产系统中,如果把应用程序服务器作为NT 服务运行甚至不会有控制台。即使把控制 台日志重定向到一个输出文件,当产品应用程序服务器重新启动时,这个文件很可能也将被 重写。 如果异常确实不用处理,应该用日志系统将异常输出的日志中去。在 Java 领域目前有两个 日志工具非常流行:一个是 Log4J,它是来自 Apache 的 Jakarta 的一个开放源代码的项目; 另一个是 J2SE 1.4 捆绑提供的。以Log4j 为例: try { … } catch(ClassNotFoundException e) { Logger.getLogger(getClass()).error(e.getMessage,e); } 这种输出异常的方式一般只适用于开发人员认为此异常不应该暴露给上层的情况,而对于其 他的则不应该使用此处理方式。 u 将异常处理后重新抛出 try { … } catch(IOException e) { found = false; throw e; } u 将异常转换成其他受查异常重新抛出 try { testException(); } catch (LoadPluginClassException e) { e.printStackTrace(); } private static void testException() throws LoadPluginClassException { try { Class class1 = Class.forName(com.cownew.test.Class1); Class class2 = Class.forName(com.cownew.test.Class2); } catch (ClassNotFoundException e) { throw new LoadPluginClassException(PluginClass not found); } } 运行结果: com.LoadPluginClassException: Pl

文档评论(0)

bodkd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档