Java的异常处理try_catch(精)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.为什么要使用异常处理

例外是在程序运行过程中发生的异常事件,比如除0溢出、数组越界、文件找不到等,这些事件的发生将阻止程序的正常运行。为了加强程序的健壮性,程序设计时,必须考虑到可能发生的异常事件并做出相应的处理。

当发生错误时,通过异常处理,使程序作出相应的处理,不至于导致系统崩溃,程序终止.

当发生错误时,可以在短时间内找到错误所在行,方便程序的维护.

下面举一个简单的例子,具体的看一下异常的好处:

class TestNoException ...{

public TestNoException( ...{

}

public boolean test1( ...{

int d = 0;

int a = 42 / d;

System.out.println("i want to print this line!";

return true;

}

public static void main(String args[] ...{

TestNoException tst = new TestNoException(;

tst.test1(;

}

}

运行这个类的main函数看看,test1(函数的目的是打印出语句"i want to print this line!",但是程序发生异常,导致无法实现.

2.异常处理的框架

try ...{

// block of code to monitor for errors

}

catch (ExceptionType1 exOb ...{

// exception handler for ExceptionType1

}

...//可以抛出多个异常

catch (ExceptionType2 exOb ...{

// exception handler for ExceptionType2

}

finally ...{

// block of code to be executed before try block ends

}

以上是JAVA异常处理的通用框架,大部分的异常处理都可以使用该框架进行处理.

使用finally块释放资源

finally关键字保证无论程序使用任何方式离开try块,finally中的语句都会被执行。在以下三种情况下会进入finally块:

(1) try块中的代码正常执行完毕。

(2)在try块中抛出异常。

(3)在try块中执行return、break、continue。

因此,当你需要一个地方来执行在任何情况下都必须执行的代码时,就可以将这些

代码放入finally块中。当你的程序中使用了外界资源,如数据库连接,文件等,必须将释放这些资源的代码写入finally块中。

必须注意的是,在finally块中不能抛出异常。JAVA异常处理机制保证无论在任何情况下必须先执行finally块然后在离开try块,因此在try块中发生异常的时候,JAVA虚拟机先转到finally块执行finally块中的代码,finally块执行完毕后,再向外抛出异常。如果在finally块中

抛出异常,try块捕捉的异常就不能抛出,外部捕捉到的异常就是finally块中的异常信息,而try块中发生的真正的异常堆栈信息则丢失了。

请看下面的代码:

Connection con = null;

try

...{

con = dataSource.getConnection(;

……

}

catch(SQLException e

...{

……

throw e;//进行一些处理后再将数据库异常抛出给调用者处理

}

finally

...{

try

...{

con.close(;

}

catch(SQLException e

...{

e.printStackTrace(;

……

}

}

运行程序后,调用者得到的信息如下

ng.NullPointerException

at myPackage.MyClass.method1(methodl.java:266

而不是我们期望得到的数据库异常。这是因为这里的con是null的关系,在finally语句中抛出了NullPointerException,在finally块中增加对con是否为null的判断可以避免产生这种情况。

出于省事的目的,很多人习惯于用一个庞大的try块包含所有可能产生异常的代码,

这样有两个坏处:

阅读代码的时候,在try块冗长的代码中,不容易知道到底是哪些代码会抛出哪些异常,不利于代码维护。

使用try捕获异常是以程序执行效率为代价的,将不需要捕获异常的代码包含在try块中,影响了代码执行的效率。

Java 的ng 中定义的未检查异常子类

异常说明

ArithmeticException 算术错误,如被0除

ArrayIndexOutOfBoundsException 数组下标出界

ArrayStoreException 数组元素赋值类型不兼容

ClassCastException 非法强制转换类型

IllegalArgumentException 调用方法的参数非法

IllegalMonitorStateException 非法监控操作,如等待一个未锁定线程

IllegalStateException 环境或应用状态不正确

<>

相关文档
最新文档