JAVA异常机制介绍/如何正确的进行JAVA异常处理

  • Post author:
  • Post category:java






作者:Maverick





blog:




http://blog.csdn.net/

zhaohuabing


转载请注明出处


1. 课前练习

在阅读本文的内容之前,请从下面这段代码中找出异常处理有哪些不正确的地方。如果不能找出至少两处错误,说明你还是一个“菜鸟”,对JAVA的异常处理机制还不够了解,需要仔细阅读本文的内容,并走查一下自己编写的代码。如果你可以找出至少两处错误,恭喜你,你已经是一个熟悉JVAVA异常编码的老手了,如果有兴趣的话,请耐心阅读完本文,一起讨论一下JAVA异常处理的原则。

1 OutputStreamWriter out = …

2 java.sql.Connection conn = …

3 try {

4    Statement stat = conn.createStatement();

5    ResultSet rs = stat.executeQuery(

6       “select uid, name from user”);

7    while (rs.next())

8    {

9       out.println(“ID:” + rs.getString(“uid”)

10        “,姓名:” + rs.getString(“name”));

11    }

12    conn.close();

13    out.close();

14 }

15 catch(Exception ex)

16 {

17    e.printStackTrace();

18 }

2. 为什么需要异常处理机制

在JAVA语言出现以前,传统的异常处理方式多采用返回值来标识程序出现的异常情况,这种方式虽然为程序员所熟悉,但却有多个坏处。首先,一个API可以返回任意的返回值,而这些返回值本身并不能解释该返回值是否代表一个异常情况发生了和该异常的具体情况,需要调用API的程序自己判断并解释返回值的含义。其次,并没有一种机制来保证异常情况一定会得到处理,调用程序可以简单的忽略该返回值,需要调用API的程序员记住去检测返回值并处理异常情况。这种方式还让程序代码变得晦涩冗长,当进行IO操作等容易出现异常情况的处理时,你会发现代码的很大部分用于处理异常情况的switch分支,程序代码的可读性变得很差。

上面提到的问题,JAVA的异常处理机制提供了很好的解决方案。通过抛出JDK预定义或者自定义的异常,能够表明程序中出现了什么样的异常情况;而且JAVA的语言机制保证了异常一定会得到恰当的处理;合理的使用异常处理机制,会让程序代码清晰易懂。


3. JAVA异常类型

JAVA异常的类层次如下图所示:




Throwable是所有异常的基类,程序中一般不会直接抛出Throwable对象,Exception和Error是Throwable的子类,Exception下面又有RuntimeException和一般的Exception两类。可以把JAVA异常分为三类:

第一类是Error,Error表示程序在运行期间出现了十分严重、不可恢复的错误,在这种情况下应用程序只能中止运行,例如JAVA 虚拟机出现错误。Error是一种unchecked Exception,编译器不会检查Error是否被处理,在程序中不用捕获Error类型的异常;一般情况下,在进行程序编码时也不应该抛出Error类型的异常。

第二类是RuntimeException,RuntimeException 是一种unchecked Exception,即表示编译器不会检查程序是否对RuntimeException作了处理,因此在程序中不用捕获RuntimException类型的异常,也不必在方法体声明抛出RuntimeException类。一般来说ÿ



版权声明:本文为zhaohuabing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。