Note:First posted on about 2004年3月
/*
* @deprecated too old, just for fun.
*/
---------------------------------------------------
When used to best advantage, exceptions can improve a program's readability, reliability and maintainability. When used improperly, they can have the opposite effect.
Playing basketball也一样,漂亮的假动作的确可以帅呆了我,但用得不合理则只能说是花哨而不实用了。
Exception可分为三类,checked exceptions, runtime exceptions和errors。
比如,盖帽时可能产生打手等exceptions,但这不会导致比赛就此不能进行。可以通过罚球来go on. 只是你的这次盖帽因犯规而无效,即不能得到你盖帽数增一的结果。这类exception称之为checked exception.
而有时比赛过程中,可能同于球员比现实在是糟糕,而导致观众闹事(晕),比如向现场砸瓶子和水果,从而导致比赛意外中断。比赛能不能go on. 你也不能确定。这样便产生了一个runtime exception.
还有一些情况,比如比赛时,电子记分牌突然产生一个exception.74分变成了47分,这时你也只好叹于无奈,因为这是一个error.
由此看来,checked exceptions是可以恢复的,即可恢复条件下应该用checked exceptions,而后两种exceptions needn't并且通常shouldn't be caught. 其中runtime exceptions的出现意味着你的程序本身有问题,你可以通过改进球队的战术来解决。而errors是James Gosling的问题,不关你的事。
Exceptions很有用,但很多情况的exceptions是unnecessary的。
比如下面一个程序:
while(没有防守){
try{
投篮();
}catch(距离太远Exception e){
System.out.println("距离远于10米,我可不想三不粘");
}
...
}
这个程序可以正常运行,但如果Kobe在后场无人盯防时运球,却不得不停地抛出"距离太远exception",这还真够难为他的。改一下:
while(没有防守){
if(距离<5){
投篮();
}
...
}
这回Kobe只要睁着眼,一瞧篮框距离不远,便可起跳了。
另外,一方法产生exception后,不应该改变调用该方法对象的状态。如下这个程序就犯了这个毛病:
public void 盖帽(){
盖帽次数++;
if(打手)
throw new 打手Exception();
}
这样一来,一场比赛得三双就容易了很多,呵呵。改成:
public void 盖帽(){
if(打手)
throw new 打手Exception();
盖帽次数++;
}
就行了。这个问题看似easy,却也是最容易犯错的地方。
最后还有一个问题,也是一个最普遍和最严重的问题,那就是:exception没描述清楚.(地球人都知道啊^^)
Ignoring an exception is analogous to ignoring a fire alarm--and turning it off so no one else gets a chance to see if there's a real fire.
犯规时,一个裁判得如此描述:A队6号打手犯规,犯规次数累计共3次,并由B队罚球2次。否则,只闻一声哨响,双方球员争嚷,围住一球狂强,拳打脚踢真爽......
分享到:
相关推荐
Java中的异常体系主要分为两大类:`Error` 和 `Exception`。 - **Error**:通常表示系统级的错误,例如内存不足等,这类问题程序员通常无法避免,也不应该去处理。 - **Exception**:表示可以通过程序设计来避免或...
在C++编程语言中,异常处理(Exception Handling)是一个至关重要的概念,它允许程序员优雅地处理程序运行时发生的错误情况,而不是让程序崩溃。"Exception C++ & More Exception C++"可能是指两本关于深入理解和...
解决"a java exception has occurred"的方法非常简单,只需要在Eclipse中添加tomcat-ujli.jar到classpath中即可。下面是添加tomcat-ujli.jar的步骤: 1. 在Eclipse中双击TOMCAT SERVER,出现"Edit launch ...
### Java中的异常处理详解 #### 一、异常基础概述 在Java编程中,异常处理是一项重要的机制,用于处理运行过程中可能发生的错误情况。通过合理的异常处理,可以显著提高程序的健壮性和可用性。 ##### 1. 异常概念...
理解Native Exception的发生机制及其处理流程对于诊断和解决Android应用中的底层问题至关重要。 #### 二、Native Exception流程 **1. Native Exception Flow** 当Native代码中发生异常时,会触发一系列的内部流程...
eAppRAISE宏用于抛出异常,其参数Exception-ID是一个标识符,用于区分不同类型的异常,方便在catch语句中进行特定异常的处理。 【ExceptionApp的高级应用】 ExceptionApp提供了诸如内存分配宏、调试模式下的异常...
在编程世界中,错误处理是不可或缺的一部分,Java和许多其他编程语言中,"error"和"exception"这两个术语经常被提及。理解它们之间的区别对于编写健壮和可靠的代码至关重要。 首先,我们来看"error"。在Java中,`...
java Exception中Throwable和Exception之间的区别
当我们在`catch`块中捕获`Exception`时,实际上捕获的是所有`Exception`类及其子类的实例。这意味着像`NullPointerException`、`IOException`等常见的异常会被捕获,但是`Error`类及其子类(例如`OutOfMemoryError`...
这个基类通常是为了扩展C++标准库中的`std::exception`,增加额外的功能,比如包含抛出异常时的行号、文件名或者函数名称等。 在`ExceptionEx.cpp`和`ExceptionEx.h`这两个文件中,我们可能看到以下内容: 1. `...
标题“Uncaught DOMException:”通常出现在JavaScript编程中,指的是在执行代码时遇到了一个未捕获的DOM(Document Object Model)异常。这个错误通常意味着在访问或操作DOM元素时发生了问题,可能是由于尝试访问不...
自定义异常是在Java中通过继承`java.lang.Throwable`或其子类(如`Exception`或`Error`)来实现的。通常,我们选择继承`Exception`类,因为它用于表示程序可以恢复的错误,而`Error`则用于表示系统级的严重问题,...
为了避免程序中断,可以使用`EXCEPTION WHEN NO_DATA_FOUND THEN`来捕获并处理这个异常。 2. **TOO_MANY_ROWS** (ORA-01422): 当`SELECT INTO`语句返回多于一行数据时,会出现此异常。在处理时,通常需要修改查询以...
nested exception is java.lang.NoClassDefFoundError_kmode exception" 指出的问题,是Java开发中常见的错误,通常发生在运行时。这个错误表明系统在尝试执行某个类时找不到对应的类定义。`NoClassDefFoundError` ...
"ExceptionLog"是一个针对开发过程中的异常处理工具,它的主要功能是记录和分析在软件开发过程中出现的错误信息。在编程中,异常是程序运行时遇到的问题,可能导致程序崩溃或产生不可预见的结果。ExceptionLog的存在...
在这个例子中,如果 `b` 为零,会抛出 `ArithmeticException`,这是一个未检查异常,编译器不会强制要求处理它,但如果不处理,程序会在运行时崩溃。 **源码与工具** 了解异常处理机制的源码可以帮助开发者深入理解...
标题提到的“异常日志捕获ExceptionLog”是一种常见的实践,旨在记录应用运行过程中的错误和异常信息,以便后续分析和调试。 在AndroidManifest.xml文件中,我们通常会在`<application>`节点下添加自定义的应用类...
3. **处理异常**:在程序的 `EXCEPTION` 块中编写异常处理代码。例如: ```plsql EXCEPTION WHEN first_exception THEN -- code to handle first exception WHEN second_exception THEN -- code to handle second...
java development part of exception