`

checked or runtime or unchecked?

阅读更多

checked or runtime or unchecked?

"MalformedURL-
Exception, for instance, indicates that the address given for the service is not
valid. To recover from this exception, the application will at minimum need to be
reconfigured and may have to be recompiled. No try/catch block will be able to
recover gracefully, so why should your code be forced to catch and handle it?"

看SpringInAction时原RMI时,看到了上面的一段话,再结合这些天项目中的业务逻辑和异常处理,想通了异常处理时的一些困惑.

Java中的异常处理要比C++中强大的多(书上说的,这个我也能多多少少地体会的到),不过当初自学Java学到异常这一块很是苦恼,当时由于没有多少项目经验也就想体会不到Java里异常的优点.只是停留在字面上,"死盯"着"Exception"这个单词看,只是从它自己的类图里记住了Exception分RuntimeException和checked exception,根本不理解把Exception分成这几种情况的初衷,当然也不可能很好很自觉地用到自己的设计中来.

看到SpringInAction里的那段话后,再回过头来研读了Sun提供的Tutorial里关于"
The Three Kinds of Exceptions"(http://java.sun.com/docs/books/tutorial/essential/exceptions/catchOrDeclare.html)
的描述,现在一下子明白多了.

Exception这个单词说的就是正常业务逻辑之外的那想"不正常"(也就是"异"这个字的来源),不过这个"不正常"又可分成多种情况.
    (1),用咱们的大白话有些不正常是用户自身造成的,就像SunTutorial里所说的那样,本来业务逻辑要求用户输入一个存在的可读的文件的路径给系统,可用户由于种种原因输入不合法,这种情况下,一个Well-written的系统就该报出Exception来告诉用户文件路径有误,并在用户重新输入路径后进入正常的处理逻辑.

    (2),还有的不正常情况是那些用户和系统都无能为力的,比如说SunTutorial中提到的那种硬盘坏了.当这种"不正常"发生时用户很难像"文件不合法"那样就可以轻易就可解决掉的,针对这种情况,Java就提供了Error这个类.对于这个Error当然也可用Catch来捉住它,不过捉住后也没什么多大的用处(现在能想到一个好处就是把这个Error所描述的信息给更友好地报告给用户).

    (3),上面的(1)和(2)都属于系统外部的(一个是用户自身,一个是硬件或网络情况),最后一种自然也就是系统自身了,像我们常看到的那种NullPointerException,NoSuchMethodException...这些异常的报出完全说明了系统自身不够robust,设计不够合理,Coding不够仔细.当这种Exception报出后,除了整个系统大修并重新编译外别的无药可救.这也就是"Runtime exceptions are not subject to the Catch or Specify Requirement. The application can catch this exception, but it probably makes more sense to eliminate the bug that caused the exception to occur."

现在再回过头来回答标题里的问题:我们所面对的"不正常"以check的角度来分有两种:checked和unchekced(呵呵,有些废话的意思).而unchecked分为Error和Exception里除RuntimeException中别的子类.

 

刚看到的一个新链接: http://www.javaworld.com/javaworld/jw-11-2007/jw-11-exceptionset.html

11
5
分享到:
评论
3 楼 rmn190 2008-03-27  
Likewise,if there are errors in the query,little can be done about it at runtime.

If there is nothing that can be done to recover from an SQLException,why are we forced to catch it?

That's because SQLException is treated as a "one size fits all" exception for problems related to data access.Rather than hava a different exception type for each possible problem, SQLException is the exception that's thrown for all data access problems.

What we need is a hierarchy of data access exceptions that are descriptive but not directly associated with a specific persistence framework.

---摘自<Spring In Action>
2 楼 rmn190 2008-03-20  
对,对,说反了,多谢指正!

应该是"而unchecked分为Error和Exception里RuntimeException及其子类".

再次感谢!
1 楼 fujohnwang 2008-03-20  
概念听着有点儿混淆

最后一句:而unchecked分为Error和Exception里除RuntimeException中别的子类.

好像说反了吧?! “Exception里除RuntimeException中别的子类”这个好像是checked exception。

runtimeException及其子类和Error及其字类属于unchecked exception之列。

相关推荐

    Checked and Unchecked Exception

    本文将深入探讨“Checked”和“Unchecked”异常的区别,以及它们在实际编程中的应用。 Checked异常,也称为编译时异常,是那些在编译阶段必须被处理的异常。如果一个方法可能会抛出Checked异常,那么该方法要么通过...

    详解Java中的checked异常和unchecked异常区别

    Java中的checked异常和unchecked异常区别详解 Java中的checked异常和unchecked异常是Java语言中两种不同的异常类型,它们之间的区别是很多开发者容易混淆的。下面,我们将详细介绍checked异常和unchecked异常的概念...

    深入理解c# checked unchecked 关键字

    checked 和 unchecked关键字用来限定检查或者不检查数学运算溢出的;如果使用了checked发生数学运算溢出时会抛出OverflowException;如果使用了unchecked则不会检查溢出,算错了也不会报错。1. 一段编译没通过的代码...

    C#难点逐个击破(7):checked与unchecked

    在C#编程语言中,`checked`和`unchecked`关键字是用来控制整数算术运算和类型转换时是否进行溢出检查的重要工具。了解这两个关键字的用法和含义对于编写安全的代码至关重要,尤其是在处理可能涉及大数值计算或者类型...

    C#入门之checked和unchecked的区别实例解析

    在C#编程语言中,`checked`和`unchecked`关键字是用来控制整数算术运算时是否检查溢出的。这两个关键字对于理解C#中的数值计算行为至关重要,特别是当你处理可能会导致数值溢出的操作时。溢出发生在尝试将一个超出其...

    通过实例了解java checked和unchecked异常

    通过实例了解 Java checked 和 unchecked 异常 Java 异常分为两种类型:checked 异常和 unchecked 异常。checked 异常是可以在执行过程中恢复的,例如无效的用户输入、文件不存在、网络或者数据库链接错误等。这些...

    Java的checked和unchecked异常

    Java异常分为两种类型,checked异常和unchecked异常,另一种叫法是异常和错误。  简单地讲,checked是可以在执行过程中恢复的,而unchecked异常则是无法处理的错误。  checked异常:  表示无效,不是程序中...

    详解Java中Checked Exception与Runtime Exception 的区别

    Java 中 Checked Exception 与 Runtime Exception 的区别 Java 中的异常处理机制是 Java 语言的一个重要特色,它允许程序产生例外状况。在学习 Java 时,我们需要了解不同种类的异常的区别。Java 提供了两种异常...

    Jquery 获取checkbox的checked问题

    在jQuery中,获取复选框(checkbox)的`checked`状态是一个常见的操作,但往往存在一些误解。在讨论这个问题之前,我们先明确HTML中的`checked`属性和jQuery中获取该属性值的区别。 在HTML中,当一个复选框被选中时...

    探讨c#中的unchecked是什么意思,起什么作用?

    Checked与Unchecked 对于因为整数类型参与算术操作和类型转换时产生的“溢出异常”——System.OverflowException,在某些算法来讲不算真正的“异常”,相反这种溢出常常为程序所用。C#通过引入checked和unchecked...

    java 面试常见问题整理

    Checked Exception 和 Unchecked Exception 有什么区别? Throwable 类常用方法有哪些? try-catch-finally 如何使用? finally 中的代码一定会执行吗? 如何使用 try-with-resources 代替try-catch-finally? I/O ...

    xp checked debug 64位版本

    《深入理解Windows XP 64位Checked Debug版》 Windows XP是微软公司推出的一款经典操作系统,而其64位Checked Debug版本则是为了开发者和系统管理员专门设计的,它包含了大量的调试工具和信息,有助于深入理解和...

    checked unitree

    "Checked Unitree" 是一个与Delphi编程语言相关的组件或库,主要用于开发应用程序时构建和管理树形数据结构。在Delphi中,开发者经常使用这样的组件来展示层次化的信息,如文件系统、数据库结构或者组织架构等。这个...

    QT的QTreeWidget有checkbox时轻松选中

    Qt::Unchecked : Qt::Checked); } else { // 如果点击的是其他列,也切换复选框状态 for (int i = 0; i &lt; item-&gt;columnCount(); ++i) item-&gt;setCheckState(i, item-&gt;checkState(i) == Qt::Checked ? Qt::...

    vista checked debug 64位版本 共6卷卷1

    vista checked debug 64位版本,如果要debug版本的符号文件,请到MSDN上下载。希望这个对你有帮助。

Global site tag (gtag.js) - Google Analytics