当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

<b>Java理论与实践: 关于非常的辩论</b>[Java编程]

赞助商链接



  本文“<b>Java理论与实践: 关于非常的辩论</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

关于在 Java 语言中利用非常的大大都倡议都认为,在确信非常可以被捕捉 的任何情形下,应当优先利用查抄型非常.语言计划(编译器强迫您在办法签名 中列出大概被抛出的全部查抄型非常)以赶早期关于款式和用法的著作都支持该 倡议.近来,几位闻名的作者已经开始认为非查抄型非常在优异的 Java 类计划 中有着比从前所认为的更为重要的地位.在本文中,Brian Goetz 观察了关于使 用非查抄型非常的优缺陷.

与 C++ 近似,Java 语言也供应非常的抛出和捕捉.但是,与 C++ 不一样的 是,Java 语言支持查抄型和非查抄型非常.Java 类必须在办法签名中声明它们 所抛出的任何查抄型非常,并且关于任何办法,假如它调用的办法抛出一个范例 为 E 的查抄型非常,那么它必须捕捉 E 大概也声明为抛出 E(大概 E 的一个 父类).通过这种方法,该语言强迫我们文档化掌握大概退出一个办法的全部预 期方法.

关于因为编程错误而招致的非常,大概是不能盼望程序捕捉的非常(解除引 用一个空指针,数组越界,除零,等等),为了使开辟人员免于处理这些非常, 一些非常被命名为非查抄型非常(即那些担当自 RuntimeException 的非常)并 且不需求举行声明.

传统的概念

在下面的来自 Sun 的“The Java Tutorial”的摘录中,总结了关于将一个 非常声明为查抄型还是非查抄型的传统概念(更多的信息请参阅 参考资料):

因为 Java 语言并不要求办法捕捉大概指定运行时非常,因此编写只抛出运 行时非常的代码大概使得他们的全部非常子类都担当自 RuntimeException ,对 于程序员来说是有吸引力的.这些编程捷径都答应程序员编写 Java 代码而不会 遭到来自编译器的全部挑剔性错误的干扰,并且不用去指定大概捕捉任何非常. 固然关于程序员来说这仿佛对比便利,但是它躲避了 Java 的捕捉大概指定要求 的企图,并且关于那些利用您供应的类的程序员大概会招致问题.

查抄型非常代表关于一个合理指定的恳求的操作的有效信息,调用者大概已 经对该操作没有掌握,并且调用者需求得到有关的告诉 —— 比方,文件系统已 满,大概远端已经关闭衔接,大概拜候权限不答应该行动.

假如您仅仅是因为不想指定非常而抛出一个 RuntimeException ,大概成立 RuntimeException 的一个子类,那么您换取到了什么呢?您只是得到了抛出一 个非常而不用您指定这样做的本领.换句话说,这是一种用于避免文档化办法所 能抛出的非常的方法.在什么时刻这是有益的?也就是说,在什么时刻避免注明 一个办法的行为是有益的?答案是“几近从不.”

换句话说,Sun 奉告我们查抄型非常应当是原则.该教程通过量种方法持续 阐明,普通应当抛出非常,而不是 RuntimeException —— 除非您是 JVM.

在 Effective Java: Programming Language Guide一书中(请参阅 参考资 料),Josh Bloch 供应了下列关于查抄型和非查抄型非常的知识点,这些与 “ The Java Tutorial” 中的倡议相一致(但是并不完好严峻一致):

第 39 条:只为非常条件利用非常.也就是说,不要为掌握流利用非常,比 如,在调用 Iterator.next() 时而不是在第一次查抄 Iterator.hasNext() 时 捕捉 NoSuchElementException .

第 40 条:为可恢复的条件利用查抄型非常,为编程错误利用运行时非常. 这里,Bloch 回应传统的 Sun 概念 —— 运行时非常应当只是用于指导编程错 误,比方违反前置条件.

第 41 条:避免不必要的利用查抄型非常.换句话说,关于调用者不大概从 此中恢复的情形,大概惟一可以预见的呼应将是程序退出,则不要利用查抄型异 常.

第 43 条:抛出与抽象相适应的非常.换句话说,一个办法所抛出的非常应 该在一个抽象层次上定义,该抽象层次与该办法做什么相一致,而不一定与办法 的底层实现细节相一致.比方,一个从文件、数据库大概 JNDI 装载资源的办法 在不能找到资源时,应当抛出某种 ResourceNotFound 非常(普通利用非常链来 保存隐含的缘由),而不是更底层的 IOException 、 SQLException 大概 NamingException .

重新观察非查抄型非常的正统概念

近来,几位受尊崇的专家,包含 Bruce Eckel 和 Rod Johnson,已经公开声 明固然他们最初完好赞成查抄型非常的正统概念,但是他们已经认定排他性利用 查抄型非常的设法并没有最初看起来那样好,并且关于很多大型项目,查抄型异 常已经成为一个重要的问题根源.Eckel 提出了一个更为极度的概念,倡议全部 的非常应当是非查抄型的;Johnson 的概念要保守一些,但是仍旧表示传统的优 先挑选查抄型非常是过度的.(值得一提的是,C# 的计划师在语言计划中挑选 忽视查抄型非常,使得全部非常都是非查抄型的,因而几近可以必定他们具有丰 富的 Java 技术利用经验.但是,后来他们的确为查抄型非常的实现留出了空间 .)


  以上是“<b>Java理论与实践: 关于非常的辩论</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .